MySQL 5.7+,在嵌套路径中使用JSON_SET值

5 浏览
0 Comments

MySQL 5.7+,在嵌套路径中使用JSON_SET值

为了最新的开发项目,我们正在使用MySQL 5.7,以便利用最新的JSON函数...

我正在构建一个UPDATE查询,其中嵌套的json对象应该被插入/添加到属性列中,属性列的类型为JSON,见下面的查询。

UPDATE `table` SET `table`.`name` = '测试',
    `table`.`attributes` = JSON_SET(
         `table`.`attributes`,
         "$.test1", "测试1",
         "$.test2.test3", "测试3"
     )

当我执行这个查询时,属性字段包含了数据

{"test1": "测试1"}

而不是期望的

{"test1", "测试1", "test2": {"test3", "测试3"}}

我也尝试使用JSON_MERGE,但是当我多次执行它时,它创建了一个类似的JSON对象

{"test1": ["测试1", "测试1", "测试1"...等等], "test2": {"test3": ["测试3", "测试3", "测试3"...等等]}}

所以,当节点不存在时,JSON_SET不起作用?JSON_MERGE会无限合并吗?

JSON对象中使用的键可以由用户定义,因此不可能为所有可能的键创建一个空的JSON对象。我们真的需要在每个UPDATE查询之前执行一个JSON_CONTAINS / JSON_CONTAINS_PATH查询,以确定我们是否需要使用JSON_SET还是JSON_MERGE / JSON_APPEND吗?

我们正在寻找一种始终有效的查询方式,所以当给定"$.test4.test5.test6"时,它将扩展当前的JSON对象,添加完整的路径... 如何做到这一点?

0