在mysql json中按值删除数组元素

Dav*_*542 4 mysql mysql-json

是否可以通过 mysql 的 json 数组中的值(而不是索引)删除元素?例如:

# ['new', 'orange']
update waitinglist SET new = JSON_REMOVE("orange", '$') WHERE id=2;
# now it will be ['new']
Run Code Online (Sandbox Code Playgroud)

如果没有,是否有更好的方法来存储它,以便我可以根据需要删除元素?此外,数组中永远不会有重复项。

Nic*_*ick 7

如果您知道数组中从不存在重复项,则可以使用JSON_SEARCH查找要删除的值的路径,然后使用JSON_REMOVE将其删除。请注意,您需要检查是否JSON_SEARCH确实找到了一个值,否则JSON_REMOVE会使整个字段无效:

UPDATE waitinglist 
SET new = JSON_REMOVE(new, JSON_UNQUOTE(JSON_SEARCH(new, 'one', 'orange')))
WHERE JSON_SEARCH(new, 'one', 'orange') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

在 dbfiddle 上做了一个小演示

请注意,您必须JSON_UNQUOTE在响应中使用fromJSON_SEARCH以使其成为JSON_REMOVE.