mysql - 如何按 id 删除 mySQL JSON 列元素,而不是按索引 num
问题描述
提供数据源:
https://raw.githubusercontent.com/usnistgov/oscal-content/master/examples/ssp/json/ssp-example.json
我已将此添加到名为json_data
的表中的 JSON 列中ssp_models
,记录 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/
解决方案
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',
''))
推荐阅读
- javascript - 我正在尝试将我的函数调用存储在一个对象中
- python - Python 类在每次调用时继承单例初始化实例
- python - 为什么带有 Scikit-learn 的 Sagemaker 不起作用,给出 ParamValidationError?
- javascript - 反应:点击按钮更新表单
- php - 如何使用 Sendgrid 调用动态 html 文件中的姓名和邮件地址?
- oracle - 如何使用 sql loader 将 10k 以上的字符加载到单个 oracle 库
- c# - Xaml 岛 - 第 3 方控件
- maven - 无法使用 maven Fabric8 将 Spring Boot 应用程序部署到 openshift 集群:TLS 内部错误
- python - 从字典中随机选择变量
- reactjs - HttpMessageNotReadableException:缺少所需的请求正文