如何在postgresql中修改数组jsonb?

时间:2016-08-11 01:15:37

标签: arrays postgresql set jsonb

在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, 怎么实现呢?

1 个答案:

答案 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作为输入参数。