我使用的是9.6版。我有一個看起來是這樣的文件:如何選擇和更新PostgreSQL中JSON數組元素?
{
"name" : "John Doe",
"phones" : [
{
"type" : "mobile",
"number" : "555-555-0000",
"deleted": false
},
{
"type" : "home",
"number" : "555-555-0001",
"needsUpdated" : true
},
{
"type" : "work",
"number" : "555-555-0002"
}
]
}
我創造了他們這樣的:
create table t_json (c_json json not null);
insert into t_json (c_json) values ('{"name":"John Doe","phones": [{"type":"mobile","number":"555-555-0000"},{"type":"home","number":"555-555-0001"},{"type": "work","number": "555-555-0002"}]}');
insert into t_json (c_json) values ('{"name":"Jane Dane","phones": [{"type":"mobile","number":"555-555-0030"},{"type":"home","number":"555-555-0020"},{"type": "work","number": "555-555-0010"}]}');
現在,我試圖找出如何A
,選擇具有名稱的行李四 ,並將他的手機號碼更新爲「555-555-0003」。
從這裏Postgresql 9.6 documentation我想通了,我可以像這樣適當的文檔查詢:
select c_json from t_json where c_json->>'name' = 'John Doe';
但我沒有看到如何在手機數組中的類型選擇合適的子文檔,並更新號碼值。誰能幫我嗎?
編輯
我需要承擔的子文檔有額外的價值和不一致。所以我在上面加了一些。我很確定,如果沒有數據丟失,此更新是不可能的。
我想你使用jsonb_set這個 – maxymoo
的可能的複製[如何修改新的PostgreSQL JSON數據類型裏面領域?](https://stackoverflow.com/questions/18209625/how-do-i-modify-fields-inside-the-new-postgresql-json-datatype) –
@ JorgeCampos這不是重複的。我已經讀完了整個問題和每個答案,但沒有找到更新數組內子文檔的方法。不過謝謝。 –