更新 mysql 中 json 字段的键值
Update the key value of a json field in mysql
我有以下 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 workbench 上的字段进行直接更新时,它会生成以下查询,
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 模式的其他数据点的值,查询应该是什么样子。
JSON_REPLACE
,
Replace values in JSON document
JSON_REMOVE
,
Remove data from JSON document
JSON_INSERT
Insert data into JSON document
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_SET 来处理插入和更新操作。
UPDATE my_json_table
SET containerValue = JSON_SET(containerValue, '$."Covid-19Vaccine Staus"', 'Vaccinated')
WHERE id = 94;
因此,如果您的密钥在您的 JSON 中尚不存在,它将插入值 Vaccinated
。否则,将更新您的密钥对应的值。
您还可以找到有关如何使用 JSON_SET
处理数组或多个值的示例 here。
如果你只需要更新值而不在你的 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;
我有以下 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 workbench 上的字段进行直接更新时,它会生成以下查询,
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 模式的其他数据点的值,查询应该是什么样子。
JSON_REPLACE
,
Replace values in JSON document
JSON_REMOVE
,
Remove data from JSON document
JSON_INSERT
Insert data into JSON document
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_SET 来处理插入和更新操作。
UPDATE my_json_table
SET containerValue = JSON_SET(containerValue, '$."Covid-19Vaccine Staus"', 'Vaccinated')
WHERE id = 94;
因此,如果您的密钥在您的 JSON 中尚不存在,它将插入值 Vaccinated
。否则,将更新您的密钥对应的值。
您还可以找到有关如何使用 JSON_SET
处理数组或多个值的示例 here。
如果你只需要更新值而不在你的 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;