如何从 MySQL 的 JSON 数组中删除一个数字?

How to remove a number from MySQL's JSON array?

如果我有一个 MySQL table 和一个名为 numbers 的 JSON 列和一个在该列中有 [1, 2, 3] 的记录(整数数组),如何更新该记录以删除 2(因此它变为 [1, 3])?

在有人找到更好的解决方案之前,我只是将其转换为对象:{"1": 1, "2": 2, "3": 3}。是的,这更丑陋并且占用更多磁盘 space,但您可以获得不必担心重复的好处。

要添加号码:

update tbl set numbers = json_insert(`numbers`, '$."4"', 4);

删除号码:

update tbl set numbers = json_remove(`numbers`, '$."4"');

获取特定编号的行:

select * from tbl where json_contains_path(`numbers`, 'one', '$."4"');

我正在寻找自己的答案并来到这个问题,不想使用我继续搜索的对象。但是我找到了一个解决方案,你需要使用 json_removejson_search

的组合

以下从 table tblnumbers

列中删除值 1
UPDATE tbl
SET numbers = JSON_REMOVE(
  numbers, replace(json_search(numbers, 'one', 1), '"', '')
)
WHERE json_search(numbers, 'one', 1) IS NOT NULL
  1. json_search returns 值所在的路径,即。 "$[0]"
  2. replace 删除 " 否则 json_remove
  3. 会出现错误
  4. json_remove 将从 json_search 结果中删除路径

Et voila,你的值被删除了。

注意:这假设没有重复值

顺便说一句,

 JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path]
 ...])

https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-search

只是search_str