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