[英]use JSON_EXTRACT, JSON_SET, JSON_REPLACE, JSON_INSERT in json array
[英]mysql JSON_SET or JSON_INSERT function to insert object into nested object if it exists
我有一個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,
}
}
它用utilities
對象覆蓋divisions
。
所以我正在嘗試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;
在這種情況下, JSON_MERGE函數可能會很有用。
根據需要修改UPDATE
:
UPDATE `entities`
SET `config` = COALESCE(
JSON_MERGE(
`config`,
JSON_OBJECT('features',
JSON_OBJECT('utilities',
JSON_OBJECT('water', TRUE, 'gas', TRUE, 'electric', TRUE)
)
)
),
JSON_INSERT(
JSON_OBJECT(),
'$.features',
JSON_OBJECT('utilities',
JSON_OBJECT('water', TRUE, 'gas', TRUE, 'electric', TRUE)
)
)
);
參見db-fiddle 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.