鉴于以下JSON存储在MySQL json
数据类型中:
"users": [
{
"group": "manager",
"userID": "a123"
},
{
"group": "employee",
"userID": "a456"
}
]
如何在不知道数组位置的情况下用"userID": "a456"
删除用户对象?
如果我们知道该职位,那么以下工作:
$query = 'UPDATE jsontable SET
jsondata = JSON_REMOVE
(
jsondata,
"$.users[1]"
);';
然而,我正在寻找的是这样的:
$query = 'UPDATE jsontable SET
jsondata = JSON_REMOVE
(
jsondata,
(
JSON_SEARCH
(
jsondata,
"all",
JSON_OBJECT("userID", "a456")
)
)
);';
以上内容会为jsondata
列生成数据截断错误。其他变体(例如直接放置userID而不是JSON_OBJECT
)也会产生错误。
我需要在查询中修复什么才能使JSON_SEARCH
返回我想要从数组中删除的特定对象的路径?
请记住它应该只在<{1}}内进行 搜索,因为使用这些ID的主JSON对象上可能还有其他属性。
答案 0 :(得分:1)
我认为这JSON_SEARCH
可能适合你。它应为您返回路径。最后一个参数'$**.users'
表示仅搜索名为users
SELECT
JSON_SEARCH(jsondata, 'one', 'a456', null, '$**.users')
FROM jsontable
在此处找到Dbfiddle JSON_SEARCH
<强>更新强>
与JSON_REMOVE
,JSON_SEARCH
和REPLACE
函数的合并声明取消引用 JSON_SEARCH的结果。
UPDATE jsontable
SET jsondata = JSON_REMOVE(
jsondata, REPLACE(
JSON_SEARCH( jsondata, 'one', 'a456', null, '$**.users' )
, '"'
, ''
)
);
其他信息: