验证两个Mongodb集合是否相同

use*_*349 0 mongodb

我只是在寻找通常采用两个文件内容的shasum的最简单的等价物.我不想通过一个eval函数来比较每个项目,因为这篇文章建议: 如何比较2个mongodb集合?

Mongodb的Sharding/Replication功能必须已经为此内置了一个有效的方法,但是我没有看到关于如何为了比较而访问它的文档条目.

Ste*_*nie 8

Mongodb的Sharding/Replication功能必须已经为此内置了一个有效的方法,但是我没有看到关于如何为了比较而访问它的文档条目.

复制依赖于幂等操作日志(oplog),不必计算集合上的校验和.MongoDB手册详细介绍了复制同步,包括初始同步和正在进行的复制行为.

有一个内部 dbHash命令使用分片来计算在数据库中的所有集合的MD5校验.它旨在验证分片集群配置数据库中集合的一致性,但可用于计算任何数据库的md5总和.

注意:该dbHash命令显然不是稳定的面向客户端的API的一部分,因此实现/ API可能会在MongoDB版本之间发生变化,恕不另行通知.

由于此命令会迭代所选数据库的所有集合中的所有文档,因此在大型数据库或生产数据库上运行时需要谨慎(特别是如果数据集大于RAM).读取大量文档可能导致临时从内存工作集中分页出有用的数据/索引.

命令输出类似于以下内容:

> db.runCommand('dbHash')
{
  "numCollections": 2,
  "host": "nibbler.local",
  "collections": {
    "foo1": "adf5db735ce0ac74c35a561675614676",
    "foo2": "adf5db735ce0ac74c35a561675614676",
    "foo3": "26e01a5da467064790a61108170a3b5c"
  },
  "md5": "f8f53a3cde773a61f5b4ccf4c3d99e07",
  "timeMillis": 0,
  "fromCache": [ ],
  "ok": 1
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中foo1,foo2集合具有相同的md5总和,但foo3不同.