mySQL JSON 文档存储方法,用于将数据插入节点 3 深
Posted
技术标签:
【中文标题】mySQL JSON 文档存储方法,用于将数据插入节点 3 深【英文标题】:mySQL JSON Document Store method for inserting data into node 3 levels deep 【发布时间】:2021-05-23 01:53:29 【问题描述】:我想从这里获取数据:https://raw.githubusercontent.com/usnistgov/oscal-content/master/examples/ssp/json/ssp-example.json
我已经将一个名为“ssp_models”的 mysql 数据库拉入一个名为“json_data”的 JSON 列中,我需要在“party”节点中添加一个新的“name”和“type”条目,其中包含一个新的 uuid格式与示例相同。
所以在我的 mySQL 数据库表“ssp_models”中,我有这个条目:注意我应该能够通过以某种方式引用“66c2a1c8-5830-48bd-8fdd-55a1c3a52888”作为要修改的记录来写入数据。
我在网上看到的所有示例似乎都迫使我将整个 JSON 读入一个变量,进行加法,然后将其塞回 json_data 列,这似乎代价高昂,尤其是对于大型 JSON 数据集.
有没有简单的方法可以说
“INSERT INTO ssp_models JSON_INSERT
我正在查看另一个用于插入 JSON 的 *** 示例:
How to create and insert a JSON object using MySQL queries?
但是,当您从头开始时,这基本上很有用,而不是需要将 JSON 数据添加到已经存在的数据中。
【问题讨论】:
提供ssp_models
的 CREATE TABLE、一些示例数据作为 INSERT INTO(2-3 行)、要插入的值(存在 - 但将其格式化为代码)和所需的数据状态。并指定精确的 MySQL 版本。
【参考方案1】:
如果您要继续在 MySQL 中处理 JSON 数据,您可能需要阅读 https://dev.mysql.com/doc/refman/8.0/en/json-function-reference.html 并探索每个功能,并一一尝试。
我能够做到你这样描述的事情:
update ssp_models set json_data = json_array_append(
json_data,
'$."system-security-plan".metadata.parties',
json_object('name', 'Bingo', 'type', 'farmer')
)
where uuid = '66c2a1c8-5830-48bd-8fdd-55a1c3a52888';
然后我检查了数据:
mysql> select uuid, json_pretty(json_data) from ssp_models\G
*************************** 1. row ***************************
uuid: 66c2a1c8-5830-48bd-8fdd-55a1c3a52888
json_pretty(json_data):
"system-security-plan":
"uuid": "66c2a1c8-5830-48bd-8fdd-55a1c3a52888",
"metadata":
"roles": [
"id": "legal-officer",
"title": "Legal Officer"
],
"title": "Enterprise Logging and Auditing System Security Plan",
"parties": [
"name": "Enterprise Asset Owners",
"type": "organization",
"uuid": "3b2a5599-cc37-403f-ae36-5708fa804b27"
,
"name": "Enterprise Asset Administrators",
"type": "organization",
"uuid": "833ac398-5c9a-4e6b-acba-2a9c11399da0"
,
"name": "Bingo",
"type": "farmer"
]
我从像你这样的数据开始,但是对于这个测试,我截断了 parties
数组之后的所有内容。
【讨论】:
再一次,很好的帮助,因为它完美运行。以上是关于mySQL JSON 文档存储方法,用于将数据插入节点 3 深的主要内容,如果未能解决你的问题,请参考以下文章