在postgresql中,我有一个像这样定义的表:
create table carts(
id serial,
cart json
)
有这样的数据:
id cart
3 [{"productid":5,"cnt":6},{"productid":8,"cnt":1}]
5 [{"productid":2},{"productid":7,"cnt":1},{"productid":34,"cnt":3}]
如果我想修改数据“cnt”,id = n且productid = m, 我怎样才能做到这一点? 例如,当id = 3,productid = 8时,我想将cnt更改为cnt + 3, 怎么实现呢?
答案 0 :(得分:0)
试试这个,我们将使用jsonb_set
方法
jsonb_set(target jsonb, path text[], new_value jsonb)
将返回jsonb对象
update carts
set cart = (
(select json_agg(val)from
(SELECT
CASE
WHEN value->>'productid'='8' THEN jsonb_set(value::jsonb, '{cnt}', (((value->>'cnt')::int)+3)::text::jsonb)::json --again convert to json object
ELSE value END val
FROM carts,json_array_elements(cart) where id=3))
where id=3;
希望它适合你
编辑:您可以通过创建
id
和的函数来推广这一点productid
作为输入参数。