[英]Modify array inside of jsonb object
我有一個包含 object 的表列 ( columnName
)。 這些對象的屬性之一( objectKey
)是一個字符串數組。 我想在該數組前面添加一個值( newValue
)。 我一生都無法從數據庫中弄清楚如何做到這一點。
我能得到的最接近的執行以下操作:
ARRAY['newValue'] || (columnName::jsonb->>'objectKey')
但這會轉義原始數組中的所有字符,並且在技術上使原始數組成為新數組中的元素。
有沒有一種簡單的方法可以在數據庫中執行此操作?
我的專欄示例如下所示:
{"objectKey":["one","two","three"],"objectKey2":["one","two","three"]}
運行腳本后,我希望它是:
{"objectKey":["newValue","one","two","three"],"objectKey2":["one","two","three"]}
您可以使用jsonb_set()
向數組添加值。 雖然語法有點笨拙。 您需要使用不存在的索引“偽造”它。
jsonb_set(the_column, '{objectKey,-9999}'::text[], '"newValue"'::jsonb, true)
9999
只是一個不存在的數組索引,通過使用負值,新元素將添加到數組的開頭, 如手冊中所述
或者,您可以使用||
連接兩個對象:
給 append 一個值,你可以使用||
Abelisto 建議的運算符:
jsonb_set(the_column, '{objectKey}', (the_column -> 'objectKey') || '["newValue"]')
在開頭添加元素:
jsonb_set(the_column, '{objectKey}', '["newValue"]' || (the_column -> 'objectKey'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.