如何使用mysql函数在json数组中按属性删除对象?

3xiyfsfu  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(419)

给定存储在mysql中的以下json 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 返回要从数组中移除的特定对象的路径?
记住它应该只在 users ,因为主json对象上可能有其他使用这些id的属性。

qhhrdooz

qhhrdooz1#

我觉得这个 JSON_SEARCH 可能对你有用。它应该为你返回路径。最后一个参数 '$**.users' 指示仅在名为 users ```
SELECT
JSON_SEARCH(jsondata, 'one', 'a456', null, '$**.users')
FROM jsontable

在这里查找dbfiddle json\u搜索
更新
合并报表 `JSON_REMOVE` ,  `JSON_SEARCH` 以及 `REPLACE` 函数,用于取消引用json搜索的结果。

UPDATE jsontable
SET jsondata = JSON_REMOVE(
jsondata, REPLACE(
JSON_SEARCH( jsondata, 'one', 'a456', null, '$**.users' )
, '"'
, ''
)
);

dbfiddle with json\u删除
其他信息:
mysql json搜索
mysql json\u删除
mysql json路径语法

相关问题