更新或插入 (jsonb_set)
SELECT jsonb_set('{"a":{"aa":{"aaa": 1,"bbb": 2}}}', '{a,aa,aaa}', '4') --> {"a": {"aa": {"aaa": 4, "bbb": 2}}}
SELECT jsonb_set('{"a":{"aa":{"aaa": 1,"bbb": 2}}}', '{a,aa,ccc}', '4') --> {"a": {"aa": {"aaa": 1, "bbb": 2, "ccc": 4}}}
需要注意的是,插入时路径(除最后一个)必须存在,即这里a,aa必须存在,否则无法插入;
若是往子Map更新键值对且直接以Map格式更新,还需与之前子Map数据合并,否则会丢失;
jsonb_set(COL_NAME, '{a,aa}', COL_NAME#>'{a,aa}' || '{"bbb":22}')
由于第3个参数格式为jsonb,值为字符串时还需加上引号才能正确执行;
SELECT jsonb_set('{"a":{"aa":{"aaa": 1,"bbb": 2}}}', '{a,aa,ccc}', '"hello"')
删除子Map中的key (#-)
SELECT '{"a":{"aa":{"aaa": 1,"bbb": 2}}}'::jsonb #- '{a,aa,bbb}' --> {"a": {"aa": {"aaa": 1}}}
更多说明请查看官方文档:https://www.postgresql.org/docs/10/functions-json.html
文章评论
+1s
斯国一内,欧尼酱