Как удалить число из массива JSON MySQL?



Если у меня есть таблица MySQL со столбцом JSON под названием numbers и запись, которая имеет [1, 2, 3] в этом столбце (массив целых чисел), как я могу обновить эту запись, чтобы удалить 2 (таким образом, она становится [1, 3])?

520   2  

2 ответов:

Я искал ответ для себя и пришел к этому вопросу, не желая использовать объекты, которые я продолжал искать. Но я нашел решение, нужно использовать комбинацию json_remove и json_search

Следующее удаляет значение 1 из таблицы tbl и столбца numbers

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 возвращает путь, в котором находится значение, т. е. "$[0]"
  2. replace Удалите " в противном случае произойдет ошибка с json_remove
  3. json_remove удалит путь из json_search результат

И вуаля, ваша ценность удалена.

Примечание: это не предполагает наличия повторяющихся значений

Пока кто-то не найдет лучшее решение, я просто преобразовал его в объект: {"1": 1, "2": 2, "3": 3}. Да, это уродливее и занимает больше места на диске, но вы получаете преимущество, не беспокоясь о дубликатах.

Чтобы добавить число:

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"');

Comments

    Ничего не найдено.