对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

dbHash(数据库命令)

dbHash

返回数据库中集合的哈希值以及这些集合的 MD5 值。 dbHash 可用于比较跨 mongod 实例的数据库,例如跨副本集节点的数据库。

警告

dbHash 命令在数据库上获得共享 (S)锁,这会在该命令完成之前阻止写入。

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas :用于在云中部署MongoDB 的完全托管服务

重要

M0 和 Flex 集群不支持此命令。有关更多信息,请参阅不支持的命令。

该命令具有以下语法:

db.runCommand(
{
dbHash: 1,
collections: [ <collection1>, ... ],
maxTimeMS: <integer>
}
)

该命令接受以下字段:

字段
类型
说明

dbHash

任何类型

要运行的命令。可以指定任何值。

collections

阵列

可选。当前数据库中集合名称的大量。仅按名称指定每个集合。请勿使用数据库限定名称,例如 test.orders。

要返回数据库中所有集合的哈希值,请指定空大量。

maxTimeMS

non-negative integer

可选。

指定时间限制(以毫秒为单位)。如果您未指定 maxTimeMS 值,操作将不会超时。如果值为 0 ,则显式指定默认无限制行为。

MongoDB 使用与 db.killOp() 相同的机制终止超过分配的时间限制的操作。MongoDB 仅在指定的中断点之一中终止操作。

如果 collections大量中的集合不存在,则 dbHash 不会返回该集合的哈希值。数据库限定名称(例如 test.orders)从不匹配,因为 dbHash 会将每个条目与当前数据库中的集合名称进行比较。

如果 collections大量中没有与集合匹配的名称,或者集合存在但为空,dbHash 将返回空输入 d41d8cd98f00b204e9800998ecf8427e 的 md5 值。

注意

dbhash 的输出不区分不存在的集合和空集合。

在比较跨部署的 md5 值之前,请确认返回文档的 collections字段列出了您期望的每个集合。

dbHash 命令不再支持afterClusterTime。因此,dbHash 不能与因果一致的会话关联起来。

此命令将返回一个包含以下字段的文档:

字段
说明

主机

运行命令的 mongod 实例的主机和端口。

collections

包含集合及其相应哈希值的文档。

{
<collection1>: <hash1>,
<collection2>: <hash2>,
...
}

capped

列出固定大小集合的数组。

uuids

包含集合及其相应 UUID 值的文档。

{
<collection1>: <UUID1>,
<collection2>: <UUID2>,
...
}

md5

这些集合的聚合哈希值。

timeMillis

生成哈希值所需的毫秒数。

ok
operationTime
$clusterTime

每个命令都会返回。详情另见响应。

以下示例返回数据库 test 中所有集合的哈希值:

use test
db.runCommand( { dbHash: 1 } )

该操作将返回以下文档:

{
"host" : "myHostName.local:27017",
"collections" : {
"foo" : "d27b769230edc551d869060ec3fb68bd",
"inventory" : "ec3d821581ea1bd3aa8196c94b946874",
"log" : "d41d8cd98f00b204e9800998ecf8427e",
"orders" : "0242c0a128c284ea9576a34db2306c12",
"restaurants" : "5dc9b88091c36f0d529567b5b6e3fc92",
"zipcodes" : "31ede812bf397509a87359c65bf2a08c"
},
"capped" : [
"log"
],
"uuids" : {
"foo" : UUID("469592fe-3bfe-425e-975f-cedbe0c4741d"),
"inventory" : UUID("0830e0ad-cc24-4fc7-80d0-8e22fe45e382"),
"log" : UUID("4be024ff-711b-4ab8-836b-dee662e090f1"),
"orders" : UUID("755be489-745f-400c-ac3b-f27525ad0108"),
"restaurants" : UUID("520b56ec-3276-4904-b6e5-286bc9bfa648"),
"zipcodes" : UUID("12e97b70-c174-40af-a178-5d83a241fe20")
},
"md5" : "0cb7417ae9d9eb865000b4debdc671da",
"timeMillis" : 53,
"ok" : 1,
"operationTime" : Timestamp(1529208582, 4),
"$clusterTime" : {
"clusterTime" : Timestamp(1529208582, 4),
"signature" : {
"hash" : BinData(0,"X3MmevDqUgCVvN1AhnT+fiOL/Lc="),
"keyId" : Long("6567898567824900097")
}
}
}

以下示例返回数据库 test 中集合 inventory 和 orders 的哈希值:

use test
db.runCommand( { dbHash: 1, collections: [ "inventory", "orders" ] } )

该操作将返回以下文档:

{
"host" : "myHostName.local:27017",
"collections" : {
"inventory" : "ec3d821581ea1bd3aa8196c94b946874",
"orders" : "0242c0a128c284ea9576a34db2306c12"
},
"capped" : [ ],
"uuids" : {
"inventory" : UUID("0830e0ad-cc24-4fc7-80d0-8e22fe45e382"),
"orders" : UUID("755be489-745f-400c-ac3b-f27525ad0108")
},
"md5" : "cb4676f316ff2ff29c701a5edd18afe3",
"timeMillis" : 0,
"ok" : 1,
"operationTime" : Timestamp(1529208801, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1529208801, 1),
"signature" : {
"hash" : BinData(0,"I4z4a4Mgs+tcx0MP5xIU8DYAMB0="),
"keyId" : Long("6567898567824900097")
}
}
}