Arrays 修改jsonb对象内部的数组

Arrays 修改jsonb对象内部的数组,arrays,postgresql,Arrays,Postgresql,我有一个表列(columnName),其中包含一个对象。这些对象的属性之一(objectKey)是字符串数组。我想在该数组前加一个值(newValue)。在我的一生中,我无法从数据库中找出如何做到这一点 我能得到的最接近的方法如下: ARRAY['newValue'] || (columnName::jsonb->>'objectKey') 但这会转义原始数组中的所有字符,并且从技术上讲会使原始数组成为新数组中的元素 在数据库中有没有一种简单的方法可以做到这一点 我的专栏示例如下所

我有一个表列(
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
只是一个不存在的数组索引,通过使用负值,新元素被添加到数组的开头


或者,您可以使用
|
连接两个对象:

要附加值,可以使用Abelisto建议的
|
运算符:

jsonb_set(the_column, '{objectKey}', (the_column -> 'objectKey') || '["newValue"]')
要在开始处添加元素,请执行以下操作:

jsonb_set(the_column, '{objectKey}', '["newValue"]' || (the_column -> 'objectKey'))

不错。我正在检查我的选择现在,它似乎会工作。一旦完成测试和更新,我将标记为已接受。ThanksBTW,关于“没有简单的方法可以附加或插入值”。。。经过一些简短的调查:似乎操作员优先级有问题,尤其是
|
->
。或者我错过了什么…@Abelisto:好主意。这确实有效。我加了一个例子。。。。若要预加值,应使用
“[“newValue”]”| |(列->“objectKey”)
,如DBFIDLE示例所示。@Abelisto:true;)