【问题标题】:Update the key value of a json field in mysql更新mysql中某个json字段的键值
【发布时间】: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 架构的其他数据点的值,查询应该是什么样子。

【问题讨论】:

    标签: mysql json mysql-8.0


    【解决方案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。但我看到这个值也是必需的?我有多个记录,我只需要更改密钥。
    • @Bisoux JSON_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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-11
      • 2021-03-10
      • 1970-01-01
      • 2011-11-29
      • 2019-06-10
      • 1970-01-01
      • 2020-09-21
      • 2017-05-05
      相关资源
      最近更新 更多