簡體   English   中英

Sails.js Waterline UPDATE:如何處理多個更新

[英]Sails.js Waterline UPDATE: How to handle multiple updates

我有一個我想要更新的對象數組,因此需要多次更新。 我正在尋找實現這一目標的最佳方法。 每個對象包含相同的屬性,但每個對象的屬性具有不同的值。

我實現這樣的東西嗎?

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文檔中注意到這里 ,對於更新功能的第二個參數可以是對象或數組,我只是不清楚,如果我可以這樣使用它。 文件不清楚。

如果我不能像這樣使用它並且我想嘗試迭代或遞歸方法,你會建議我實現它嗎?

你的適配器是什么?

我曾與MySQL來做到這一點,我做了查詢我的自我 ,然后調用PersonModel.query(myQuery)

我按照這個答案來制作它(兩個字段的例子):

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);"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM