我创建了一个PostgreSQL(v10.0),如下所示。

CREATE TABLE test (id INT, animals jsonb)

INSERT INTO test VALUES
   (1, '["[monkeys, 10]", "[hamsters, 7]", "[foxes, 3]"]'),
   (2, '["[monkeys, 10]", "[hamsters, 7]", "[foxes, 3]"]')

然后我附加一个新的动物如下:
UPDATE test
SET animals = animals || '["[hamsters, 7]"]'::jsonb
WHERE id = 1;

但是,我只想在元素还不在数组中时追加元素。

最佳答案

您可以使用附加WHERE子句:

UPDATE test
SET animals = animals || '["[hamsters, 7]"]'::jsonb
WHERE id = 1 AND animals ~ '"\[hamsters, \d\]"'

这里我不使用jsonb,而是使用正则表达式。为了避免嵌套数组,并且因为"[hamsters, 7]"本身不会是数组-只是一个字符串,所以我比较了字符串运算符。。。

10-08 04:38