我有一個這樣的 JSONB 列“deps”
[
[{
"name": "A"
}, "823"],
[{
"name": "B"
}, "332"],
[{
"name": "B"
}, "311"]
]
我想為列“deps”中的 JSON 陣列包含具有“name”“B”的元組的所有行設定“stats”列為 NULL。在上面的示例中,“deps”列有兩個這樣的元組。是否可以?
字典{"name": "B"}總是在元組中排在第一位。
在這個 JSON 中進行相同的搜索會更快:
[{
"id": {
"name": "A"
},
"value": "823"
}, {
"id": {
"name": "B"
},
"value": "332"
},
{
"id": {
"name": "B"
},
"value": "311"
}
]
uj5u.com熱心網友回復:
您可以結合使用@? psql JSON 運算子jsonpath來檢查您的 JSONB blob 是否包含{"name": "B"}所有出現的元組的任何第一個值。
這是來自所述問題的 JSONB blob 示例:
-- returns 'true' if any first tuple value contains an object with key "name" and value "B"
SELECT '[[{"name": "A"}, "823"], [{"name": "B"}, "332"], [{"name": "B"}, "311"]]'::JSONB @? '$[*][0].name ? (@ == "B")';
現在您可以將其與您的UPDATE邏輯結合起來:
UPDATE my_table
SET stats = NULL
WHERE deps @? '$[*][0].name ? (@ == "B")';
uj5u.com熱心網友回復:
@>如果內容具有第一個示例的結構,則可以使用 contains 運算子
update the_table
set stats = null
where deps @> '[[{"name": "B"}]]'
對于第二個示例中的結構,您需要使用:
where deps @> '[{"id": {"name": "B"}}]'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/410933.html
標籤:
