更新 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 functions

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;