特定のサブ文書(複数)を更新したいのですが、そのために2つの方法があります。私はどちらが良いか知りたい。MongoDBのサブ文書を更新する方が良い
サンプル文書
{
_id: 1,
doc: [{
prop1: false,
prop2: 1
},{
prop1: false,
prop2: 1
},{
prop1: true,
prop2: 2
}]
}
方法1:
db.docs.findOne({}, function(err, result){
if(err || !result) return next(err || []);
result.doc.forEach(function(doc){
if(doc.prop2 === 1){
doc.prop1 = true;
}
});
doc.save();
});
方法2:
db.docs.findOne({_id: 1}, function(err, result){
if(err || !result) return next(err || []);
var bulk = db.docs.initializeUnorderedBulkOp();
result.doc.forEach(function(doc){
if(doc.prop2 === 1){
bulk.find({
_id: 1,
"doc.prop2": 1
}).update({
$set: {
"doc.$.prop1": true
}
});
}
});
bulk.execute();
});
示唆してください。質問があればお知らせください。
$ unwind(https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/)を使用すると、入力文書から配列フィールドを分解して各要素の文書を出力できます。各出力ドキュメントは、配列フィールドの値を要素で置き換えた入力ドキュメントです。 –
@Blastfreak $ unwindは集約サイクルの演算子です。ここでは、複数のサブ文書を更新しようとしています。それらを単純な形式で検索するのではありません。だからちょうど複数のサブ文書を更新するより良い方法を知りたい。どのようにdeconstructs私は複数のサブ文書を更新するのに役立つだろうか? – Sachin