2

对现有 JSON 文档进行映像:

{
  "first": "data",
  "second": [1,2,3]
}

当我尝试执行时:

JSON_ARRAY_APPEND(doc,'$.third',4)

我希望 mysql 将参数创建为一个空数组并将我的元素添加到该数组中,结果是:

{
  "first": "data",
  "second": [1,2,3],
  "third": [4]
}

然而事实并非如此。我正在尝试在 UPDATE 查询中执行此操作,以使用类似于以下内容的方式将数据添加到数据库中:

UPDATE mytable 
   SET myjson=JSON_ARRAY_APPEND(myjson,'$.third',4) 
 WHERE ...

如果这有什么不同,我正在使用 mysql 8.0.16。我没有收到任何错误,只是0 row(s) affected

4

1 回答 1

3

JSON不是一个数组,所以如果键的顺序无关紧要JSON_ARRAY_APPEND(),你可以考虑使用函数而不是:JSON_MERGE_PATCH()

UPDATE mytable 
   SET myjson = JSON_MERGE_PATCH(myjson, '{"third": [4]}') 

Demo

根据归一化原理;为了使查找更有效,MySQL 还对 JSON 对象的键进行排序。您应该知道,此排序的结果可能会发生变化,并且不能保证在不同版本之间保持一致。

于 2019-12-12T19:58:09.687 回答