我有一个带有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
?
答案 0 :(得分:1)
效果很好:
UPDATE things
SET data =
jsonb_set(data,
'{things,0,moreThings}',
data->'things'->0->'moreThings' || '{ "text": "thing" }',
TRUE
)
WHERE id = 1;
如果您有一个仅包含主键和jsonb
属性的表,并且您经常要在数据库中操作此jsonb
,则您肯定做错了。如果对数据进行更多的标准化,将使您的生活变得更加轻松。