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

标签 mysql json sql-update mysql-function

对现有 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 行受到影响

最佳答案

您的 JSON 不是数组,因此您可以考虑使用 JSON_MERGE_PATCH() 函数,而不是 JSON_ARRAY_APPEND()键并不重要:

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

Demo

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

关于mysql - 当 JSON 文档中不存在路径时如何使用 JSON_ARRAY_APPEND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59309664/

相关文章:

mysql - 使用 WHERE 和 GroupBy 在子查询 SELECT 语句中计数

javascript - C# - MVC - JSON - 使用 ViewBag 将列表从服务器端返回到客户端

postgresql - 在 JSONB 数组中插入元素 - Postgresql

php - zend框架中的查询返回空数组

php - 从Mysql导出大量数据(20000行)到excel(使用Php)

使用jq在cli上解析Json

javascript - 从具有多个属性的数组映射 json 数据

sql - 计算更新次数

SQL 根据前几行填空数据

java - Java/Mysql服务器程序中邮箱账号密码存储