postgres / Sequelize: редактировать объект в массиве jsonb, если значение его свойства совпадает - PullRequest
1 голос
/ 20 июня 2020

У меня есть db home с таблицей room, имеющей столбец appliances, в котором хранится массив jsonb. Имеет такие значения, как

[{
    "name": "TV",
    "uuid": "21"
  },
  {
    "name": "Oven",
    "uuid": "22"
  }
]

Теперь я хочу отредактировать значение с помощью uuid 22 и установить его на {"name":"Fridge","uuid":23}. Как мне это сделать? Нет в ответах, объясняющих jsonb_set et c. помогли мне. Это не обязательно должен быть запрос продолжения, мне тоже удобен необработанный запрос.

1 Ответ

0 голосов
/ 20 июня 2020

Учитывая, что ваш тип данных - jsonb [] и данный набор данных, простейшее решение вашей проблемы: array_replace:

Попробуйте следующее:

update room set appliances= array_replace(appliances,'{"name": "Oven","uuid": "22"}', '{"name": "Fridge","uuid": "23"}');

ДЕМО

Нет необходимости в jsonb_set. Работает только с jsonb.

...