我有一个 json 类型的列config
,我想在其中添加一个键值对,最终看起来像:
{
"features": {
"divisions": true,
"utilities": {
"water": true,
"gas": true,
"electric": true
}
}
}
我遇到的问题是,当我想在功能中插入实用程序对象时,我要么覆盖divisions
键值,要么返回NULL
并且utilities
没有插入对象。
此外,该config
列可能是NULL
或最初只是一个空的{}
。
此查询将检查 NULL 或空 {} 以及键是否存在,但如果它已经存在则features
导致覆盖:features
UPDATE entities SET config = JSON_SET(COALESCE(config, '{}'),
COALESCE("$.features", "features"), JSON_OBJECT("utilities",
JSON_OBJECT("water", TRUE, "gas", TRUE, "electric", TRUE)))
WHERE id = 123725082;
除非该列已经包含以下内容,否则这可以正常工作:
{
"features": {
"divisions": true,
}
}
它divisions
用utilities
对象覆盖。
所以我正在尝试 JSON_INSERT 查询;从我从 mysql json 函数文档中收集到的内容应该可以工作,但它返回 null,我不明白为什么:
UPDATE entities SET config = JSON_INSERT(COALESCE(config, '{}'),
COALESCE("$.features", "features"), JSON_OBJECT("utilities",
JSON_OBJECT("water", TRUE, "gas", TRUE, "electric", TRUE)))
WHERE id = 123725082;