如何从 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_remove
和 json_search
的组合
以下从 table tbl
和 numbers
列中删除值 1
UPDATE tbl
SET numbers = JSON_REMOVE(
numbers, replace(json_search(numbers, 'one', 1), '"', '')
)
WHERE json_search(numbers, 'one', 1) IS NOT NULL
json_search
returns 值所在的路径,即。 "$[0]"
replace
删除 "
否则 json_remove
会出现错误
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
如果我有一个 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_remove
和 json_search
以下从 table tbl
和 numbers
UPDATE tbl
SET numbers = JSON_REMOVE(
numbers, replace(json_search(numbers, 'one', 1), '"', '')
)
WHERE json_search(numbers, 'one', 1) IS NOT NULL
json_search
returns 值所在的路径,即。"$[0]"
replace
删除"
否则json_remove
会出现错误
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