更新mysql中某个json字段的键值
Posted
技术标签:
【中文标题】更新mysql中某个json字段的键值【英文标题】:Update the key value of a json field in mysql 【发布时间】:2021-12-20 12:44:54 【问题描述】:我有以下 json 字段
"Covid-19Vaccine Staus": "Not vaccinated (intent to in the future)",
"Date of last vaccine taken": "2021-08-09T00:00:00+04:00",
"If vaccinated, Name of vaccination received": "Other WHO Approved vaccine"
我想做的是将关键描述(即 Covid-19 Vaccine Staus)更新为 Covid19VaccineStaus。
在对 mysql 工作台上的字段进行直接更新时,它会生成以下查询,
UPDATE `my_json_table` SET `containerValue` = '\"Covid19VaccineStaus\": \"Vaccinated\", \"Date of last vaccine taken\": \"2021-07-13T00:00:00+04:00\", \"If vaccinated, Name of vaccination received\": \"Pfizer-BioNTech\"' WHERE (`id` = '94');
看起来它需要字段的整个值,然后进行更新。
如果我只想更新 Covid19VaccineStatus 键而不输入 json 架构的其他数据点的值,查询应该是什么样子。
【问题讨论】:
【参考方案1】:请看JSON functions
JSON_REPLACE
,
替换 JSON 文档中的值
JSON_REMOVE
,
从 JSON 文档中删除数据
JSON_INSERT
将数据插入 JSON 文档
UPDATE `my_json_table` SET `containerValue` = JSON_REPLACE(`containerValue`, '$."Covid-19Vaccine Staus"', 'Vaccinated') WHERE (`id` = '94');
UPDATE `my_json_table` SET `containerValue` = JSON_REMOVE(`containerValue`, '$."Covid-19Vaccine Staus"') WHERE (`id` = '94');
UPDATE `my_json_table` SET `containerValue` = JSON_INSERT(`containerValue`, '$."Covid-19Vaccine Staus"', 'Vaccinated') WHERE (`id` = '94');
替换键并保留值
UPDATE `my_json_table`
SET `containerValue` =
JSON_REMOVE(
JSON_INSERT(`containerValue`, '$."Covid19VaccineStaus"',
JSON_EXTRACT(`containerValue`, '$."Covid-19Vaccine Staus"')),
'$."Covid-19Vaccine Staus"')
WHERE (`id` = '94');
【讨论】:
谢谢。所以在我的情况下,我将不得不使用 JSON_REPLACE。但我看到这个值也是必需的?我有多个记录,我只需要更改密钥。 @BisouxJSON_REPLACE
是替换值,您的意思是更改键并且相应的值保持原样吗?
没错,是的,这就是我希望做的。现在我不得不去手动更新字段上的键值一个一个
让我更新答案以添加此用例【参考方案2】:
您可以使用处理插入和更新操作的JSON_SET。
UPDATE my_json_table
SET containerValue = JSON_SET(containerValue, '$."Covid-19Vaccine Staus"', 'Vaccinated')
WHERE id = 94;
因此,如果您的密钥在您的 JSON 中尚不存在,它将使用值 Vaccinated
插入。否则,您的键对应的值将被更新。
您还可以找到示例 here,了解如何使用 JSON_SET
处理数组或多个值。
如果您只需要更新值而不在您的 JSON 中执行任何插入(如果键不存在),则可以使用 JSON_REPLACE。
如果您只需要插入键和值,但如果键已经存在而不在 JSON 中执行任何更新,则可以使用JSON_INSERT。
如果您想更新密钥的名称:
UPDATE my_json_table
SET containerValue = JSON_INSERT(
JSON_REMOVE(containerValue, '$."Covid-19Vaccine Staus"'),
'$.Covid19VaccineStaus',
JSON_EXTRACT(containerValue, '$."Covid-19Vaccine Staus"')
)
WHERE id = 94;
【讨论】:
以上是关于更新mysql中某个json字段的键值的主要内容,如果未能解决你的问题,请参考以下文章
如何使 JavaScript 中每个元素的 map 函数的键值递增
PostgreSQL9.4往jsonb字段新增键值SQL怎么写