如果我這樣定義一個表:
CREATE TABLE test (
id INT,
data JSONB
);
INSERT INTO test (id, data) VALUES (1, '[{"a": "x", "b":"b"}, {"c": "y", "b":"b"}]');
如何洗掉陣列中鍵為“a”且值為“x”的物件?
uj5u.com熱心網友回復:
您可以通過運行以下更新來洗掉這些 JSON 物件:
update test set data = new_data.new_data
from (
select id, json_agg(element) as new_data
from test,
jsonb_array_elements(data) as element
where not element ? 'a' or element ->> 'a' != 'x'
group by id
) new_data
where new_data.id = test.id
中的子查詢從陣列中new_data洗掉包含a值為 的鍵的物件。這是通過首先解壓縮 JSON 陣列來完成的,以便我們可以評估它們的條件,然后進行過濾,然后從保留的物件創建一個新的 JSON 陣列。過濾由兩個條件組成,第一個檢查元素是否不包含鍵,而第二個檢查元素的值是否不是。如果任一計算結果為真,則保留該元素。xdata jsonbnot element ? 'a' or element ->> 'a' != 'x'aax
然后使用子查詢的結果來更新原始表的data列。
您可以在dbfiddle上看到結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/535302.html
標籤:postgresql
