我创建了一个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;
但是,我只想在元素尚未出现在数组中时附加元素。
答案 0 :(得分:2)
您可以使用其他WHERE
子句:
UPDATE test
SET animals = animals || '["[hamsters, 7]"]'::jsonb
WHERE id = 1 AND animals ~ '"\[hamsters, \d\]"'
这里我不使用jsonb,而只是使用正则表达式。避免嵌套数组,因为"[hamsters, 7]"
本身无论如何都不是数组 - 只是一个字符串,所以我与字符串运算符进行比较......