Ben*_*ock 2 postgresql delete update json
我试图从我的数据库中删除一个元素。我要删除的元素位于一个名为 playerContainer 的 JSON 对象中,该对象包含一个名为玩家的数组。这一切都位于一个名为 site_content 的表中。我正在尝试根据它的 ID 删除该对象。
这是示例 JSON
"playersContainer": {
"players": [
{
"id": "1",
"name": "Nick",
"teamName": "Shire Soldiers",
"ratings": [
1,
5,
6,
9
],
"assists": 17,
"manOfTheMatches": 20,
"cleanSheets": 1,
"data": [
3,
2,
3,
5,
6
],
"totalGoals": 19
},
}
Run Code Online (Sandbox Code Playgroud)
下面是我试图用来删除数组中的对象的查询
UPDATE site_content
SET content = jsonb_set(content, '{playersContainer,players}'::text[], content->'playersContainer'->'id'->'players' #- '{1}'::jsonb
Run Code Online (Sandbox Code Playgroud)
但是,这似乎删除了表中内容行中的所有数据,而不仅仅是我的玩家数组中 ID 为 1 的数组。
删除键(警告 - 与纯 SQL 数组不同,json/jsonb 数组索引从 0 开始):
UPDATE site_content
SET content #- '{playersContainer,players,0}'::text[];
Run Code Online (Sandbox Code Playgroud)
要删除具有特定 id 的数组元素:
UPDATE site_content
SET content = content #- coalesce(('{playersContainer,players,' || (
SELECT i
FROM generate_series(0, jsonb_array_length(content->'playersContainer'->'players') - 1) AS i
WHERE (content->'playersContainer'->'players'->i->'id' = '"2"')
) || '}')::text[], '{}');
Run Code Online (Sandbox Code Playgroud)