シェルで次のことを試してください。コレクション内の各アイテムを繰り返し、IDに基づいて各ドキュメントを照合しようとします。
2つのコレクションがあるとしますdb.col1
およびdb.col2
:
> db.col1.find()
{ "_id" : 1, "item" : 1 }
{ "_id" : 2, "item" : 2 }
{ "_id" : 3, "item" : 3 }
{ "_id" : 4, "item" : 4 }
> db.col2.find()
{ "_id" : 1, "item" : 1 }
{ "_id" : 2, "item" : 2 }
{ "_id" : 3, "item" : 3 }
{ "_id" : 4, "item" : 4 }
次に、2つのコレクションを比較するためのjavascript関数を作成できます
function compareCollection(col1, col2){
if(col1.count() !== col2.count()){
return false;
}
var same = true;
var compared = col1.find().forEach(function(doc1){
var doc2 = col2.findOne({_id: doc1._id});
same = same && JSON.stringify(doc1)==JSON.stringify(doc2);
});
return same;
}
次に、呼び出しは次のようになります:
> compareCollection(db.col1, db.col2)
true
次に、3番目のコレクションがある場合db.col3
> db.col3.find()
{ "_id" : 1, "item" : 1 }
そしてこれを比較してください
> compareCollection(db.col1, db.col3)
false
期待どおりの結果が得られます。
一致するドキュメントがあり、データが異なる4番目のコレクションもある場合db.col4
> db.col4.find()
{ "_id" : 1, "item" : 10 }
{ "_id" : 2, "item" : 2 }
{ "_id" : 3, "item" : 3 }
{ "_id" : 4, "item" : 4 }
これにより、false
も返されます
> compareCollection(db.col1, db.col4)
false