【问题标题】:How to delete mySQL JSON column element by id, instead of by index num如何按 id 删除 mySQL JSON 列元素,而不是按索引 num
【发布时间】:2021-05-24 08:07:13
【问题描述】:

提供了一个数据源:

https://raw.githubusercontent.com/usnistgov/oscal-content/master/examples/ssp/json/ssp-example.json

我已将此添加到名为ssp_models 的表中名为json_data 的JSON 列中,记录uuid 为66c2a1c8-5830-48bd-8fdd-55a1c3a52888

我能够从具有该数据集的“各方”节点中很好地获取记录、插入记录和删除记​​录。

但是,JSON_REMOVE 部分并没有像我想要的那样工作。目前我可以通过 indexnum json_remove 一个条目:

UPDATE ssp_models 
   SET json_data = JSON_REMOVE(json_data, '$.\"system-security-plan\".metadata.parties[0]') 

这样就可以像您期望的那样从“派对”中删除条目 [0]。

但我真正想要的是能够通过 uuid 删除记录。正如您在数据的“各方”部分中看到的,uuid 是每个条目中的一个元素:

parties: [

{

uuid: "3b2a5599-cc37-403f-ae36-5708fa804b27",

type: "organization",

name: "Enterprise Asset Owners"

},

{

uuid: "833ac398-5c9a-4e6b-acba-2a9c11399da0",

type: "organization",

name: "Enterprise Asset Administrators"

}....

那么,当它是 JSON 文档存储语法的一部分时,如何以某种方式将 'WHERE uuid = "3b2a5599-cc37-403f-ae36-5708fa804b27"' 组合到这样的 sql 查询中? (在这种情况下,我希望它会删除“企业资产所有者”条目以及它的类型和 uuid。就像我们需要添加搜索功能作为删除的一部分,但我一直在阅读的示例不要在 json_remove 中提供该选项:https://database.guide/json_remove-remove-data-from-a-json-document-in-mysql/

【问题讨论】:

    标签: mysql sql json sql-update


    【解决方案1】:

    JSON_SEARCH() 函数可用于查找元素的索引与要删除的uuid 值,例如

    UPDATE ssp_models 
       SET json_data = JSON_REMOVE(json_data, 
                           REPLACE(
                            JSON_UNQUOTE(
                                JSON_SEARCH(json_data, 
                                            'one', 
                                            '3b2a5599-cc37-403f-ae36-5708fa804b27')
                                ),'.uuid',
                           ''))
    

    Demo

    【讨论】:

      猜你喜欢
      • 2021-12-29
      • 2020-01-02
      • 2010-10-12
      • 2021-12-25
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多