我有一个
jsonb
近似结构值:
'{
"a": {
"result": 10,
"values": [
{"date": "2024-11-10", "question": 5},
{"date": "2024-11-11", "question": 10}
]
}
}'
我需要向“values”数组添加另一个对象:
{"date": "2024-11-12", "question": 1}
预期结果:
'{
"a": {
"result": 10,
"values": [ [
{"date": "2024'-11-10", "question": 5},
{"date": "2024'-11-11", "question": 10},
{"date": "2024'-11-12", "question": 1}
]
}
}'
如何在 Postgres 中实现这一点?
有多种方法可以实现所描述的结果。一种方法是使用
JSONB_INSERT
追加到 values
数组。
WITH
t (test_value) AS (
VALUES
('{
"a": {
"result": 10,
"values": [
{
"date": "2024-11-10",
"question": 5
},
{
"date": "2024-11-11",
"question": 10
}
]
}
}'::JSONB
)
)
SELECT
JSONB_INSERT(
t.test_value,
'{a, values, -1}',
'{"date": "2024-11-12", "question": 1}',
TRUE
)
FROM
t;
对
JSONB_INSERT
的调用用于查找 values
数组,并在最后一个元素之后插入新的 JSONB 对象(请参阅 表 9.49.JSON 处理函数,了解“JSONB_INSERT”的说明)。
结果是:
{
"a": {
"result": 10,
"values": [
{
"date": "2024-11-10",
"question": 5
},
{
"date": "2024-11-11",
"question": 10
},
{
"date": "2024-11-12",
"question": 1
}
]
}
}
此方法应该适用于所有当前支持的 PostgreSQL 版本(使用 v16 和 v17 进行测试)。