JSON 文档中不存在路径时如何使用 JSON_ARRAY_APPEND?

How to use JSON_ARRAY_APPEND when path does not exist in JSON doc?

对现有 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

您的 JSON 不是数组,因此如果键的顺序无关紧要,您可以考虑使用 JSON_MERGE_PATCH() 函数而不是 JSON_ARRAY_APPEND()

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

Demo

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