本文介绍了比较Mongo在两个集合上的差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有两个mongo集合,一个指向生产环境,另一个指向测试环境。
如何比较我的两个集合之间的差异?
我尝试将它们转储到bson,然后转换为json。但我不能只对它们执行简单的比较,因为排序可能会有所不同,并且json文件太大而无法排序。
推荐答案在外壳程序中尝试以下操作,它将迭代集合中的每一项,并尝试根据ID匹配每个文档。
假设我们有两个集合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 }然后我们可以创建一个Java脚本函数来比较两个集合
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更多推荐
比较Mongo在两个集合上的差异
发布评论