1

コレクション内の配列を更新するために$inandを使用しています。$addToSetこの種のドキュメントがあるとします。

{ 
    _id: objectId(1), //this is just an example id
    names: ['harry', 'hermione']
},
{
    _id: objectId(2),
    names: ['ron']
},
{
    _id: objectId(3),
    names: ['dumbledoor']
}

このドキュメントをすべて更新して、ID の配列を取得したい

var arr_ids = [1, 2];

このように配列を使用しmapます。

var ids = arr_ids.map(function(id) { return mongoose.Types.ObjectId(id); });

コレクション内のすべてのドキュメントを更新するには。

db.update( { _id: { $in: ids } }, { $addToSet: { name : 'draco' } }, 
    function(err, results) {
      if(err) console.log(err);
      console.log(results);
    }
);

andを使用する$in$addToSet、ドキュメントが機能して更新されますが、最後のドキュメントのみが更新されます。

{ 
    _id: objectId(1), //this is just an example id
    names: ['harry', 'hermione']
},
{
    _id: objectId(2),
    names: ['ron', 'draco'] // it only update this document.
},
{
    _id: objectId(3),
    names: ['dumbledoor']
}

どうしてか分かりません。個別に更新するためだけに for ループを作成したくありませんが、それが私の最後の手段のようです。私を助けてください。ありがとう!

4

1 に答える 1

1

などで試してみてmulti: trueください

db.update( /*query*/, { $addToSet: { names : 'draco' } }, {multi:  true} ...

そのドキュメントについては、マルチパラメータこの例を参照してください

于 2016-09-10T06:49:48.720 に答える