Postgres jsonb嵌套数组追加

时间:2019-03-08 09:20:39

标签: postgresql jsonb

我有一个带有jsonb列的简单表

CREATE TABLE things (
  id SERIAL PRIMARY KEY,
  data jsonb
);

数据如下:

{
    "id": 1,
        "title": "thing",
        "things": [
            {
                "title": "thing 1",
                "moreThings": [
                    { "title": "more thing 1" }
                ]
            }
        ]
}

那么如何在moreThings之类的深层嵌套数组中附加内容?

对于单级嵌套数组,我可以做到这一点,并且有效:

UPDATE posts SET data = jsonb_set(data, '{things}', data->'things' || '{ "text": "thing" }', true);

但是对于深度嵌套的数组却不起作用:

UPDATE posts SET data = jsonb_set(data, '{things}', data->'things'->'moreThings' || '{ "text": "thing" }', true)

如何附加到moreThings

1 个答案:

答案 0 :(得分:1)

效果很好:

UPDATE things
SET data =
    jsonb_set(data,
              '{things,0,moreThings}',
              data->'things'->0->'moreThings' || '{ "text": "thing" }',
              TRUE
    )
WHERE id = 1;

如果您有一个仅包含主键和jsonb属性的表,并且您经常要在数据库中操作此jsonb,则您肯定做错了。如果对数据进行更多的标准化,将使您的生活变得更加轻松。