2016-09-10 9 views
1

私は$in$addToSetを使ってコレクションの配列を更新しています。私はこの種の書類を持っていると言います。

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

私は、IDS

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

は私が$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ループを作成したくないですが、それは私の最後の手段です。私を助けてください。ありがとう!

答えて

1

それ

のドキュメントのための multi-parameterthis exampleを参照してくださいので、

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

ようmulti: trueでそれを試してみてください

関連する問題