【问题标题】:Removal from JSON array in MySQL从 MySQL 中的 JSON 数组中删除
【发布时间】:2021-09-09 02:09:25
【问题描述】:

我正在通过 JSON 数组管理关注者列表。我正在使用 JSON_ARRAY_APPEND 添加关注者:

UPDATE users 
SET follows = JSON_ARRAY_APPEND(follows, '$', "followerToBeAdded") 
WHERE username = "user"

但是,我无法从此列表中删除关注者。如果我尝试 JSON REMOVE,它只会删除整个 JSON 数组,而不是从列表中删除特定的追随者。

知道可能的查询吗?

【问题讨论】:

  • 你使用mariaDB还是MySQL?
  • 以 CREATE TABLE + INSERT INTO 脚本的形式提供示例数据,并为其提供所需的最终数据状态。指定精确的 DBMS 版本。
  • @4EACH MySQL。 Harry 的查询完美运行(接受它作为问题的答案)。

标签: mysql sql mariadb


【解决方案1】:

由于您在问题中添加了MySQL 标签,因此以下回复与MySQL 不一致。

让我们考虑具有两列username 和json 列followsusers 表。假设我们有一个用户名x 和一个关注者a

让我们添加第二个和第三个关注者

UPDATE users SET follows = JSON_ARRAY_APPEND(follows, '$', 'b') where username ='x';
UPDATE users SET follows = JSON_ARRAY_APPEND(follows, '$', 'c') where username ='x';

删除:假设我们要删除关注者b 检查要删除的关注者

SELECT JSON_SEARCH(follows, 'one', 'b')  FROM users;

上面将给出要在数组中删除的对象的路径。

UPDATE users SET follows = JSON_REMOVE(follows, JSON_UNQUOTE(JSON_SEARCH(follows, 'one', 'b'))) WHERE JSON_SEARCH(follows, 'one', 'b') IS NOT NULL;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 2017-02-09
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多