2016-04-26 6 views
3

私はオブジェクトの配列を更新したいので、複数の更新があります。私はこれを実装する最良の方法を探しています。各オブジェクトには同じプロパティが含まれていますが、各オブジェクトのプロパティには異なる値があります。Sails.js水曜日更新:複数の更新を処理する方法

私はこのようなものを実装していますか?

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に、更新関数の2番目の引数がオブジェクトまたは配列であることに気付きました。このように使用できるかどうかは不明です。ドキュメントは不明です。

私がこのように使うことができず、反復的または再帰的なアプローチを試したければ、どうすれば実装することを提案しますか?

+0

私はあなたが試してみるべきだと思います: var people = [ {'firstNa {'firstName': 'Jane'} ] {'firstName': 'Taylor'}、 {'firstName': 'Jake'} –

+0

ummmmmmmm、ありますか? – Brian

答えて

2

アダプターとは何ですか?

私は、MySQLでこれをしなければならなかった、私は、クエリmy selfを行い、その後、私はそれ(2つのフィールドとの一例)にするthis answerに従ってください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);" 
+0

mysqlアダプタ。オブジェクトの配列をループして、各繰り返しでクエリ文字列を更新しますか?次に、クエリを実行するだけですか?解決策が見つかったようです。私たちは必要なことをするような再帰関数を作成しました。しかし、あなたが私にそれを考えさせたいなら、あなたの答えを解説してください。 – Brian

+1

再帰呼び出しは良い考えではありません、それは256回以上の反復を行うことはできません...私は[これを使用した(http://stackoverflow.com/questions/20255138/sql-update-multiple-records-in- 1つのクエリ)を使用して要求を行います。 –

+0

これを調べたところ、それを実装するにはかなり良い方法だと思います。ありがとうございました!私が示唆している唯一のことは、答えをより明確にし、これにつまずいた人のために解説することです。 – Brian

関連する問題