使用postgresql中的jsonb_set更新jsonb数组中没有键的一个元素

时间:2018-05-29 18:17:22

标签: postgresql set jsonb array-key

我有jsonb字段audits的表data,它有内容:

"products": [
    {"id": 405, "color": null, "price": 850, "title": "test", "value": 52, "real_value": 105 }, 
    {"id": 347, "color": null, "price": 195, "title": "test2", "value": 69, "real_value": 0}
]

对于更新,需要知道元素的键,但我不知道如何找到该元素的键(0)。例如:

UPDATE audits set data = jsonb_set(data::jsonb,'{"products",0,"real_value"}','125') where id = 10 and enterprise_id = 1;

我试过用这个:

SELECT ( select index from generate_series(0, jsonb_array_length(data->'products') - 1) as index where data->'products'->index->>'id' = '347') as index_of_element FROM audits;但对于pg来说这是一项非常艰苦的操作。

我也知道如何找到此对象的产品ID:

select id as possiton from audits where data->'products' @> '[{"id":347}]';但不是数组中的键((

也许我可以使用另一个函数来更新数组中的项目,但我不知道如何。

0 个答案:

没有答案