mongodb - 比较两个集合的 mongo 差异

我有两个 mongo 集合,一个是生产环境,另一个是测试环境。

如何比较我的两个集合之间的差异?

我尝试将它们转储到 bson,然后转换为 json。但我不能只对它们进行简单的比较,因为排序可能会有所不同,而且 json 文件太大而无法排序。

最佳答案

在 shell 中尝试以下操作,它将遍历集合中的每个项目并尝试根据 ID 匹配每个文档。

假设我们有 2 个集合 db.col1db.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/

相关文章:

node.js - 将数据插入 MongoDB - 没有错误,没有插入

python - django 和 mongodb 是否使迁移成为过去?

mongodb - 更新 mongodb 中的嵌套文档

python - 我可以只获取 Cursor 对象(pymongo)中的第一项吗?

node.js - Mongoose,查找,返回特定属性

node.js - 聊天项目 - 使用 socket.io 进行负载平衡

javascript - Meteor Collection 文档 ID : Random. id(

java - 指定字段对于 MongoDB 是 transient 的,但对于 RestContro

java - 如何使用 Java 对 MongoDB 中的文档进行批量更新?

javascript - Mongoose:需要验证错误路径