如果不存在则追加 mysql json 字段

Append if not exists mysql json field

mysql 中是否有一个 JSON 函数会忽略尝试添加已存在的元素?例如:

update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', "orange")
where id=2;

update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', "orange")
where id=2;

现在我的数组看起来像:

["apple", "orange", "orange", "orange", "orange"]

但我希望它像一组一样工作,并且只是:

["apple", "orange"]

有办法吗?

我不这么认为。可以在WHERE子句中测试值是否已经在JSON中。

update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', '"orange"'))
where id=2
AND NOT JSON_CONTAINS(new, '"orange"')

如果您正在更新多列并且需要它只影响这一列,如果值已经存在,您可以使用 IF() 使其保持不变。

update waitinglist SET
new = IF(JSON_CONTAINS(new, '"orange"'), new, JSON_ARRAY_APPEND(new, '$', '"orange"'))
where id=2