我有两个 mongo 集合,一个是生产环境,另一个是测试环境。
如何比较我的两个集合之间的差异?
我尝试将它们转储到 bson,然后转换为 json。但我不能只对它们进行简单的比较,因为排序可能会有所不同,而且 json 文件太大而无法排序。
最佳答案
在 shell 中尝试以下操作,它将遍历集合中的每个项目并尝试根据 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 }
然后我们可以创建一个 javascript 函数来比较 2 个集合
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
如果我们有第三个集合 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
https://stackoverflow.com/questions/41222805/