我只是在寻找通常采用两个文件内容的shasum的最简单的等价物。我不想通过eval
函数比较每个项目,因为这篇文章建议:
How to compare 2 mongodb collections?
Mongodb的Sharding / Replication功能必须已经为此内置了一个有效的方法,但是我没有看到关于如何为了比较而访问它的文档条目。
答案 0 :(得分:8)
Mongodb的Sharding / Replication功能必须已经内置了一个有效的方法,但是我没有看到关于如何进行比较的文档条目。
复制依赖于幂等operation log (oplog),并且不必计算集合的校验和。 MongoDB手册详细介绍了replication synchronization,包括初始同步和正在进行的复制行为。
分片使用内部 dbHash
command来计算数据库中所有集合的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
}
在此示例中,foo1
和foo2
个集合具有相同的md5总和,而foo3
则不同。