如何在MySQL中将元素推送到JSON

Aya*_*yan 3 mysql mysql-json

我正在尝试将新元素推送到MySQL中的JSON数组。

例如 在下表人员中:

id(int)     liked_ids(JSON)
   1              [2,3]
Run Code Online (Sandbox Code Playgroud)

现在我想将5推入Liked_ids。

我查看了JSON_ARRAY_APPEND,但即使从文档中也找不到一种使用它的方法。

Luk*_*zda 5

您需要使用:

UPDATE tab
SET liked_ids = JSON_ARRAY_APPEND (liked_Ids, '$', 5)
WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)

DBFiddel演示

编辑:

我的liked_ids最初为null。如何在创建表时默认将其强制为数组?

您可以尝试CASE表达:

UPDATE tab
SET liked_ids = CASE WHEN liked_ids IS NULL THEN '[5]'
                ELSE  JSON_ARRAY_APPEND (liked_Ids, '$', 5)
                END
WHERE id = 1;

--or as @Paul Spiegel mentioned
UPDATE tab
SET liked_ids = COALESCE(JSON_ARRAY_APPEND(liked_Ids, '$', 5), JSON_ARRAY(5))
WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)

DBFiddle演示2

  • 太糟糕了,`JSON_ARRAY_APPEND`不喜欢空数组。但是您可以使用诸如COALESCE(JSON_ARRAY_APPEND(liked_Ids,'$',5),JSON_ARRAY(5))之类的东西来代替CASE语句。 (3认同)