sql - 如何更新 jsonb 对象的嵌套数组中的值?
问题描述
jsonb
我在 PostgreSQL 中得到以下内容:
{
"segments": [
{
"type": "year",
"settings": [
{
"name": "length",
"value": "4"
}
]
},
{
"type": "month",
"settings": [
{
"name": "length",
"value": "2"
}
]
},
{
"type": "dayOfMonth",
"settings": [
{
"name": "length",
"value": "2"
}
]
},
{
"type": "autoIncrement",
"settings": [
{
"name": "scope",
"value": "plant"
},
{
"name": "period",
"value": "day"
},
{
"name": "length",
"value": "10"
},
{
"name": "paddingCharactor",
"value": "0"
}
]
}
]
}
我想在段中将时间段从“天”更新为“永远” -> type=autoIncrement -> settings -> period
我已经尝试jsonb_set
在拆分后手动合并数据,但都失败了。
有更新价值的想法吗?
解决方案
根据要求更新给定jsonb
值:
WITH cte(j) AS (
SELECT jsonb '{ ... }'
)
SELECT jsonb_set(j, '{segments,-1,settings,1,value}'::text[], '"forever"')
FROM cte;
db<>在这里摆弄
但我不确定你问的问题是否正确。
困难的部分是知道每个嵌套数组中的数组位置。我取了外部数组的最后一个元素 ( -1
) 和内部数组的第二个 ( 1
)。以下是使用纯 SQL 实现完全动态化的方法:
请考虑采用标准化设计,就像 Kaushik 建议的那样。
推荐阅读
- javascript - 在本机反应中显示来自firebase的图像(命中错误)
- video - ffmpeg 缩放 4k 视频并添加字幕
- c - 从 crtdefs.h 获取错误
- c++ - 创建 2 个读取和显示数据的函数
- python - Kivy:在 python 代码中设置小部件禁用属性
- r - geom_tile 中每个 x 的专属比例
- c# - Linq to SQL 未在 SubmitChanges() 上保存到数据库
- c - 将指向的值分配给其他指向的值
- python - 使用 API 的授权错误 401 - Python
- arrays - 将 2 个 json 文件合并到没有重复的新 json 中