【问题标题】:MySQL JSON_REMOVE with multi arrayMySQL JSON_REMOVE 与多数组
【发布时间】:2021-02-20 09:25:02
【问题描述】:

我在名为 my_data 的 MySQL 8 列中存储了以下 JSON 文档:

{
  "managers": {
    "11": {
      "created": "2019-11-07"
    },
    "12": {
      "created": "2020-03-12"
    },
  }
}

如何删除“11”信息。

UPDATE table SET my_data = JSON_REMOVE(my_data, ??) WHERE id = 1;

【问题讨论】:

    标签: mysql mysql-8.0 mysql-json


    【解决方案1】:

    首先,您显示的数据不是有效的 JSON。我觉得应该是这样的:

    {
      "managers": {
        "11": {
          "created": "2019-11-07"
        },
        "12": {
          "created": "2020-03-12"
        }
      }
    }
    

    我设置了一个变量,所以我可以用它来测试:

    mysql> set @j = '...json above...';
    

    我试过这个,但它不喜欢使用整数作为路径键:

    mysql> select json_remove(@j, '$.managers.11');
    ERROR 3143 (42000): Invalid JSON path expression. The error is around character position 13.
    

    所以我将密钥引用为"11"

    mysql> select json_remove(@j, '$.managers."11"');
    +-------------------------------------------------+
    | json_remove(@j, '$.managers."11"')              |
    +-------------------------------------------------+
    | {"managers": {"12": {"created": "2020-03-12"}}} |
    +-------------------------------------------------+
    

    但我真的会这样做:

    DELETE FROM managers WHERE manager_id = 11;
    

    也就是说,根本不使用 JSON。为 managers 创建一个表,以 11 或 12 个值作为主键。

    在 MySQL 中使用 JSON 只会让编写代码变得更加困难,而且效率更低。这就是Inner-Platform Effect antipattern 的意义所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      相关资源
      最近更新 更多