MySQL JSON-如何在匹配路径的所有元素上使用JSON_SET?

时间:2018-12-24 18:47:55

标签: mysql json

我试图找出一个JSON_SET()查询,该查询会将{key2: 2}添加到$.a的所有元素中:

{
  "a": [
    {
      "key1": 1
    },
    {
      "key1": 1
    }
  ]
}

很显然,由于路径中的'*',该操作失败了:

UPDATE table SET json=JSON_SET(json, '$a[*].key2', 2);

这怎么办?

谢谢!

1 个答案:

答案 0 :(得分:2)

一个选项是JSON_TABLEJSON_ARRAYAGG

UPDATE `table`
  INNER JOIN (
    SELECT
      JSON_ARRAYAGG(
        JSON_SET(`der`.`_json`, '$.key2', 2)
      ) `json_key2`
    FROM
      `table`,
      JSON_TABLE(`table`.`json`,
      '$.a[*]'
      COLUMNS(
        `_json` JSON PATH '$'
      )
    ) `der`
    GROUP BY
      `der`.`_json`  
  ) `der`
SET `table`.`json` = JSON_SET(
  `table`.`json`,
  '$.a',
  `der`.`json_key2`
);

请参见db-fiddle