在 JSON 数组中追加一个数组

Appending an array within JSON array

我正在使用 MySQL 8 并尝试在 mysql table

中更新 JSON data type

我的 table t1 如下所示:

# id    key     value   
1100000 key123  [{"name": "name1", "hosts": ["host123"]}]

现在,我有一个主机列表 hostlist 如下:

SET @hostlist = '["host343", "host345"]';

我想将 @hostlist 附加到 value 中的 hosts 数组 JSON 数组:

UPDATE table t1
        SET t1.value = JSON_ARRAY_APPEND('[]', '$', JSON_OBJECT('hosts', @hostlist))
        WHERE t1.key = 'key123';
    

Desired Output:

[{"name": "name1", "hosts": ["host123","host343", "host345"]}]

您需要在现有 value 中使用指向 hosts 属性 的路径并附加到该路径。

JSON_ARRAY_APPEND() 用于将单个值附加到数组。您需要使用 JSON_MERGE_PRESERVE() 来连接数组。然后用JSON_REPLACE()把数组换成这个

UPDATE t1
SET value = JSON_REPLACE(t1.value, '$[0].hosts', JSON_MERGE_PRESERVE(t1.value->'$[0].hosts', @hostlist))
WHERE t1.key = 'key123';

DEMO