【发布时间】:2021-10-18 20:23:53
【问题描述】:
我正在尝试更改 MySQL 表中名为首选项的 JSON 字段的数组值键之一(称为宗教)。
我没有使用 JSON_ARRAY_APPEND,因为字段中的更改可能是任意的,可能涉及删除和添加。
现在我正在尝试使用以下查询来更改它。
const religionPreferences = ["Buddhism","Christianity","Non religious"]
const sql = `UPDATE users SET preferences = JSON_REPLACE(
preferences,
'$.${key}',
JSON_ARRAY(religionPreferences[0], religionPreferences[1], religionPreferences[2])
)
WHERE id = "${req.params.id}" LIMIT 1`
问题在于,religiousPreferences 数组可以包含 0-14 个元素,我不确定如何处理必须传递给 JSON_ARRAY 函数的变量参数。
const religionPreferences = ["Buddhism","Christianity","Non religious"]
const sql = `UPDATE users SET preferences = JSON_REPLACE(
preferences,
'$.religions',
JSON_ARRAY(religionPreferences[0], religionPreferences[1], religionPreferences[2])
)
WHERE id = "${req.params.id}" LIMIT 1`
我尝试的另一种方法是直接将 JSON_REPLACE 的参数设置为数组文字,而不是像下面这样传入 JSON_ARRAY。
const religionPreferences = ["Buddhism","Christianity","Non religious"]
const sql = `UPDATE users SET preferences = JSON_REPLACE(
preferences,
'$.religions',
${religionPreferences}
)
WHERE id = "${req.params.id}" LIMIT 1`
问题是我希望它保存为
religions: ["Christian","Buddhist","Other"]
而不是
religions: '["Christian","Buddhist","Other"]'
但是当我尝试直接将它保存为一个不带引号的数组时,它说 SQL 有错误..
非常感谢。 -杰
【问题讨论】:
标签: mysql mysql-json