Docs 主页 → 开发应用程序 → MongoDB Manual
验证
定义
版本 6.2 中的更改。
validate
validate
命令检查集合的数据和索引的正确性并返回结果。提示
在
mongosh
中,该命令也可以通过validate()
辅助方法运行。助手方法对于
mongosh
用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。5.0 版本中的更改。
从版本5开始。 0中,
validate
命令还可以查找集合中的不一致之处,并在可能的情况下进行修复。索引不一致包括:
如果
db.collection.validate()
命令检测到任何不一致,将返回警告,然后将索引上的修复标志设置为true
。db.collection.validate()
还会验证任何违反集合模式验证规则的文档。
语法
该命令具有以下语法:
db.runCommand( { validate: <string>, // Collection name full: <boolean>, // Optional repair: <boolean>, // Optional, added in MongoDB 5.0 metadata: <boolean>, // Optional, added in MongoDB 5.0.4 checkBSONConformance: <boolean> // Optional, added in MongoDB 6.2 } )
命令字段
该命令接受以下字段:
字段 | 类型 | 说明 | |
---|---|---|---|
validate | 字符串 | 要验证的集合名称。 | |
布尔 | 可选。一个标志,确定该命令执行较慢但更彻底的检查还是执行更快但不太彻底的检查。
默认为 从 MongoDB 3.6 开始,对于 WiredTiger 存储引擎,只有 在以前的版本中,WT 存储引擎的数据验证过程始终设置检查点。 | ||
布尔 | |||
布尔 | 可选。允许用户执行快速验证以检测无效索引选项的标志,而无需扫描所有文档和索引。
默认为 不支持将使用
如果检测到无效索引,validate 命令将提示您使用
5.0.4 版本中的新增功能。 | ||
布尔 | 可选。如果为
6.2 版本新增。 |
行为
性能
validate
命令可能会很慢,尤其是在处理较大的数据集时。
validate
命令获取集合上的独占锁W
。这将阻止对集合的所有读取和写入,直到操作完成。在辅助节点上运行时, validate
操作可以阻止该辅助节点上的所有其他操作,直到完成为止。
警告
由于验证会影响性能,请考虑仅在 从validate
rs.stepDown()
节点上运行 。您可以使用 指示当前 主 节点成为从节点,以避免影响活动的主节点。
数据吞吐量指标
$currentOp
和 currentOp
命令包含用于正在进行的验证操作的 dataThroughputAverage
和 dataThroughputLastSecond
信息。
验证操作的日志消息包括 dataThroughputAverage
和 dataThroughputLastSecond
信息。
集合验证改进
从 MongoDB 6开始。 2 、 validate
命令和db.collection.validate()
方法:
限制
MongoDB 驱动程序会自动为与 因果一致会话 关联的操作设置 afterClusterTime 。从 MongoDB4 开始。2 中,validate
命令不再支持 afterClusterTime 。因此,validate
不能与 因果一致的会话关联。
索引键格式
从 MongoDB 6.0 开始,如果唯一索引的密钥格式不兼容,validate
命令将返回一条消息。该消息会说明使用了旧格式。
举例
要使用默认验证设置(特别是full: false )验证集合
myCollection
:db.runCommand( { validate: "myCollection" } ) 要对集合
myCollection
执行全面验证,请指定full: true:db.runCommand( { validate: "myCollection", full: true } ) 要修复集合
myCollection
,请指定Repair: true:db.runCommand( { validate: "myCollection", repair: true } ) 要验证
myCollection
集合中的元数据,请指定metadata: true:db.runCommand( { validate: "myCollection", metadata: true } ) 要在
myCollection
中执行额外的 BSON 一致性检查,请指定checkBSONConformance: true:db.runCommand( { validate: "myCollection", checkBSONConformance: true } )
验证输出
注意
根据 MongoDB 实例的具体配置,输出可能有所不同。
指定full: true以获得更详细的输出。
validate.nInvalidDocuments
集合中无效文档的数量。无效文档是指无法读取的文档,这意味着BSON文档已损坏,存在错误或大小不匹配。
validate.nNonCompliantDocuments
不符合集合模式的文档数量。不合规的文档在
nInvalidDocuments
中不计为无效。从 MongoDB 6.2 开始,
nNonCompliantDocuments
还包括不符合 BSON 或时间序列集合要求的文档数量。
validate.nrecords
集合中文档数量。
validate.keysPerIndex
一个文档,包含了集合中每个索引的名称和索引条目数。
"keysPerIndex" : { "_id_" : <num>, "<index2_name>" : <num>, ... } 从 MongoDB 4开始。 2 (以及4 . 0 . 10 + 和3 . 6 . 13 +),
keysPerIndex
仅通过名称标识索引。早期版本的 MongoDB 显示索引的完整命名空间;即<db>.<collection>.$<index_name>
validate.indexDetails
一个文档,包含每个索引的索引验证状态。
"indexDetails" : { "_id_" : { "valid" : <boolean> }, "<index2_name>" : { "valid" : <boolean> }, ... } 从 MongoDB 4.2(以及 4.0.10+ 和 3.6.13+)开始,
indexDetails
标识无效的一个或多个特定索引。如果任何索引无效,MongoDB 的早期版本会将所有索引标记为无效。indexDetails
仅通过名称标识索引。早期版本的 MongoDB 显示索引的完整命名空间;即<db>.<collection>.$<index_name>
。
validate.repaired
如果
validate
修复了集合,则为true
的布尔值。
validate.warnings
一个数组,包含有关验证操作本身的警告消息(如有)。警告消息并不表示集合本身无效。例如:
"warnings" : [ "Could not complete validation of table:collection-28-6471619540207520785. This is a transient issue as the collection was actively in use by other operations." ],
validate.errors
如果集合无效(即
valid
为假),则该字段将包含一条描述验证错误的消息。
validate.extraIndexEntries
一个数组,包含指向集合中不存在的文档的每个索引条目的信息。
"extraIndexEntries" : [ { "indexName" : <string>, "recordId" : <NumberLong>, // for the non-existent document "indexKey" : { "<key1>" : <value>, ... } } ... ] 注意
对于
extraIndexEntries
数组,所有indexKey
字段大小的总和限制为1 MB,其中大小包括indexKey
的键和值。如果总和超过此大小,则警告字段会显示一条消息。从 MongoDB 4.2(以及 4.0.10+ 和 3.6.13+)开始提供
validate.missingIndexEntries
一个数组,包含缺少相应索引条目的每个文档的信息。
"missingIndexEntries" : [ { "indexName" : <string>, "recordId" : <NumberLong>, "idKey" : <_id key value>, // The _id value of the document. Only present if an ``_id`` index exists. "indexKey" : { // The missing index entry "<key1>" : <value>, ... } } ... ] 注意
对于
missingIndexEntries
数组,idKey
字段大小及其所有indexKey
字段大小的总和限制为1 MB,其中字段大小包括idKey
和indexKey
。如果总和超过此大小,则警告字段会显示一条消息。从 MongoDB 4.2(以及 4.0.10+ 和 3.6.13+)开始提供
validate.corruptRecords
一个由
RecordId
值组成的数组,表示无法读取的文档,可能是因为数据已损坏。这些文档在验证期间被报告为已损坏。RecordId
是一个 64 位整数内部密钥,用于唯一标识集合中的文档。"corruptRecords" : [ NumberLong(1), // RecordId 1 NumberLong(2) // RecordId 2 ] 版本 5.0 中的新增功能。
validate.ok
命令成功时值为
1
的整数。如果命令失败,则ok
字段的值为0
。