データベースから要素を削除しようとしています。削除する要素は、playersという名前の配列を含む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
},
}
以下は、配列内のオブジェクトを削除するために使用しようとしているクエリです
UPDATE site_content
SET content = jsonb_set(content, '{playersContainer,players}'::text[], content->'playersContainer'->'id'->'players' #- '{1}'::jsonb
ただし、これにより、players配列のIDが1の配列だけでなく、テーブルのコンテンツ行からすべてのデータが削除されるようです。
キーを削除するには(警告-純粋なSQL配列とは異なり、json/jsonb配列のインデックスは0から始まります):
UPDATE site_content
SET content #- '{playersContainer,players,0}'::text[];
特定の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[], '{}');