【问题标题】:How to update JSON record in MySQL database using MySQL query in Node.js?如何使用 Node.js 中的 MySQL 查询更新 MySQL 数据库中的 JSON 记录?
【发布时间】:2016-03-07 15:10:21
【问题描述】:

我得到的 JSON 结构类似于 question:

 var data = {
type: "binary",
choices: [
{
     choice: "No",
     answers: 18
},
{
     choice: "Yes",
     answers: 11
}
   ],
    tags: {
     2851: "road",
     8685: "had",
     10978: "heard"
    }
};

我发现使用 MySQL 查询和 Node.js 插入 json 记录以回答相同的问题。

是的,我可以通过获取整个记录、更新记录并用更新的记录替换旧记录来更新此记录。

但是我的问题是 “我可以在不下载完整 json 的情况下更新数据库中的这些 json 记录并根据 JSON 中的一个键更新这些记录吗?”

注意:这只是演示目的:如果我的字段名称是 jsonData

 "Update tableName set jsonData.choices.answers = 20 where data.choices.choice = 18 and id = 1";    

希望您了解我的场景,即根据一个键更新 JSON 记录一个值。

任何概念性建议都将受到赞赏,如果有演示代码将非常有帮助。

【问题讨论】:

  • 你的 JSON 的来源是什么? URL 还是变量?您需要完整的对象才能遍历。仅拾取部分对象可能是不可能的。但是,如果它是一个 URL 并且它只允许根据请求查询参数获取某些婴儿车,那么它可以完成。
  • 答案在 PHP 中可以吗?
  • JSON 的来源是可变的,如所讨论的那样。并且我的变量中的所有键都是强制性的。并且很有可能许多用户会同时触发该更新查询。所以有可能只有最新的更新才会影响数据库。不包含 JSON 的 URL 参数。 @AshishChoudhary
  • 是的,如果它在 PHP 中就可以了。 @thepiyush13

标签: javascript php mysql json node.js


【解决方案1】:

Json 解码数据,将其转换为数组,访问数组元素并追加到查询:

$a = json_decode($data);
"Update tableName set".$a->col1." =20......."

PHP 的 json_decode 函数接受一个 JSON 字符串并将其转换为 PHP 变量。通常,JSON 数据将代表一个 JavaScript json_decode 将转换为 PHP 的数组或对象字面量 数组或对象。

http://www.dyn-web.com/tutorials/php-js/json/decode.php

【讨论】:

  • 在这里,您首先从 tableview 中选择该记录并将其解析为 php 变量,然后更新记录。正确的?。如果有 20 个用户一次触发相同的方法,让我们以简单和小案例为例,因此一个或多个记录可能不会受到影响,因为它们同时被触发。正确的?在这里,我想直接更新查询到该记录,所以如果 100 个用户一次触发该记录,那么在所有相同的 100 次操作之后数据应该是准确的。只有一个 UPDATE 查询,没有 SELECT 查询记录。
  • 这个问题对我来说不是很清楚,但如果你在谈论并发更新冲突,在 mysql 的情况下,它使用可重复的读取隔离级别,所以如果两个事务尝试更新同一行,则第二个事务必须等待第一个事务提交或回滚,因此无论时间如何都将插入所有记录。无论如何,好点,谢谢
【解决方案2】:

我知道我在解决一个早已死去的问题,但可以肯定的是,MySQL's JSON functions 非常简单。

UPDATE tableName
SET jsonData = JSON_SET(jsonData, '$.choices.answers', 20)
WHERE data->'$.choices.choice' = 18
  AND id = 1;

阅读我的Best Practices for using MySQL as JSON storage

【讨论】:

    猜你喜欢
    • 2017-08-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2011-11-29
    相关资源
    最近更新 更多