javascript - Sails.js 水线更新 : How to handle multiple updates

标签 javascript node.js sails.js waterline

我有一个要更新的对象数组,因此是一个多重更新。我正在寻找实现它的最佳方法。每个对象都包含相同的属性,但每个对象的属性具有不同的值。

我是否实现了这样的东西?

var people = [
    {'firstName': 'Brian', 'clockedIn': '2016-4-12', 'type': 'developer'},
    {'firstName': 'Taylor', 'clockedIn': '2016-4-14', 'type': 'developer'},
    {'firstName': 'Jake', 'clockedIn': '2016-4-14', 'type': 'manager'}
];

PersonModel.update({'type': 'developer'}, people, function(err, records) {
    // ...
    // ...
});

如果我像前面的代码那样做,它到底做了什么?它会自动尝试匹配 people 数组中每条记录的主键,更新列出的任何属性,然后将更新的记录传递给回调函数吗?

我在 Sails.js 文档中注意到 here更新函数的第二个参数可以是一个对象或一个数组,我只是不清楚我是否可以这样使用它。文档不清楚。

如果我不能像这样使用它并且我想尝试一种迭代或递归方法,你会建议我如何实现它?

最佳答案

你的适配器是什么?

我必须用 MySQL 来做这个,我查询 my self , 然后调用 PersonModel.query(myQuery)

我关注 this answer制作它(有两个字段的例子):

values = [
     {
         id: 1,
         param_1: 'NewValueParam1',
         param_2: 'NewValueParam2'
     },
     {
         id: 2,
         param_1: 'AnotherNewValueParam1',
         param_2: 'AnotherNewValueParam2'
     }
];

function multiValuesUpdate(values) {
    var request = "UPDATE MyTable SET ";
    var part_param_1 = "`param_1` = (CASE `id` ";
    var part_param_2 = "`param_2` = (CASE `id` ";
    var part_ids = "WHERE `id` IN (";

    _.forEach(values, function (v) {
        part_param_1 += "WHEN '" + v.id + "' THEN '" + v.param_1 + "' ";
        part_param_2 += "WHEN '" + v.id + "' THEN '" + v.param_2 + "' ";
        part_ids += v.id + ",";
    });
    part_param_1 += "ELSE `param_1` END), "; // Be careful with the comma !
    part_param_2 += "ELSE `param_2` END) ";
    part_ids = part_ids.slice(0, -1) + ");"; // Remove the last "," and add ");"

    request += part_param_1 + part_param_2 + part_ids;
    return request;
}

console.log(multiValuesUpdate(values));

输出:

"UPDATE MyTable 
   SET `param_1` = (
   CASE `id` 
      WHEN '1' THEN 'NewValueParam1' 
      WHEN '2' THEN 'AnotherNewValueParam1' 
      ELSE `param_1` 
   END), 
   `param_2` = (
   CASE `id` 
      WHEN '1' THEN 'NewValueParam2' 
      WHEN '2' THEN 'AnotherNewValueParam2' 
      ELSE `param_2` 
   END) 
 WHERE `id` IN (1,2);"

关于javascript - Sails.js 水线更新 : How to handle multiple updates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36875290/

相关文章:

javascript - 单击按钮时添加/删除要列出的 <li> 项目 - Twitter Bootstrap

promise - 如何在 Sails.js 中正确抛出和处理 promise 中的错误?

node.js - 使用虚拟数据库在自己的环境中测试express.js应用程序

node.js - Nodejs任务实际上是如何运行的?

javascript - 更新查询mongoDB中的增量值

javascript - 当我启用布局时,为什么 sails.js 会引发如此多的浏览器控制台错误?

javascript - Sails Js - 按关联值与蓝图排序

javascript - 如何从 Objective C 调用 javaScript?

javascript - 在 Canvas 外部使用clearRect

javascript - 加载 gtm.js 时网页闪烁