2016-08-11 20 views
0

、私はこのように定義されたテーブルを持っている:私は、ID = nと、商品コードと、データ "CNT" を変更したい場合はpostgresqlで配列jsonbを変更するには? PostgreSQLでは

id  cart 
3  [{"productid":5,"cnt":6},{"productid":8,"cnt":1}] 
5  [{"productid":2},{"productid":7,"cnt":1},{"productid":34,"cnt":3}] 

create table carts(
    id serial, 
    cart json 
) 

は、このようなデータを持っています= m、 どうすればいいですか? たとえば、id = 3、productid = 8の場合、cntをcnt + 3に変更するには、 どうすれば実現できますか?

+1

多分[this](http://stackoverflow.com/questions/26703476/how-to-perform-update-operations-on-columns-of-type-jsonb-in-postgres-9-4)役立ちます。 –

+0

偉大な質問、誰も答え? – user6161156

+0

私はPostgresがJSONを適時に更新する能力が限られていると思います。その代わりに、JSONを抽出して変更し、値全体を更新する必要があります。 –

答えて

0

ここで我々は

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; 

が、それはあなたのために

EDIT作品ホープjsonbオブジェクトを返しますjsonb_set方法

jsonb_set(target jsonb, path text[], new_value jsonb)使用しますが、これを試してみてください:あなたが作成することによって、これを一般化することができますが入力パラメータとしてidおよび productidを使用します。

+0

詳細については、[Json in PostgrSql](https://www.postgresql.org/docs/9.5/static/functions-json.html)を参照してください。 – Paarth

関連する問題