MySQL JSON_REMOVE 多数组

MySQL JSON_REMOVE with multi array

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

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

如何删除“11”信息。

UPDATE table SET my_data = JSON_REMOVE(my_data, ??) WHERE id = 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 创建一个 table,将 11 或 12 值作为主键。

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