簡體   English   中英

修改 jsonb object 內部的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM