文档菜单
文档首页
/
MongoDB 手册
/ / /

验证

本页内容

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 示例
  • 验证输出

在版本中更改6.2.

validate

命令validate命令检查集合的数据和索引的正确性,并返回结果。如果您不在后台运行此命令,该命令还将修复集合计数和数据大小中的任何不一致。

提示

mongosh中,此命令也可以通过validate()辅助方法.

辅助方法对于mongosh用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。在不需要便利性或需要额外的返回字段的情况下,请使用数据库命令。

在版本中更改5.0.

从版本5.0开始,validate命令还可以在集合中找到不一致之处,并在可能的情况下修复它们。

索引不一致包括

  • 一个索引是多键,但没有多键字段。

  • 索引包含覆盖非多键字段的多键路径

  • 索引没有多键路径,但有包含多键文档的文档(对于在3.4之前构建的索引)。

如果db.collection.validate()命令检测到任何不一致性,则会返回警告,并将索引上的修复标志设置为true

db.collection.validate()还会验证任何违反集合模式验证规则的文档。

注意

validate命令不支持视图,并在针对视图运行时引发错误。

db.collection.validate()方法在mongosh中为validate提供包装。

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

重要

此命令不支持在M0、M2和M5集群或无服务器实例中。有关更多信息,请参阅不支持命令。

命令有以下语法

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
background: <boolean> // Optional
}
)

命令包含以下字段

字段
类型
描述
验证
字符串
要验证的集合名称。
布尔值

可选。一个标志,用于确定命令是执行较慢但更彻底的检查还是较快的但不太彻底的检查。

  • 如果 true,执行更彻底的检查,但有以下例外

    • 对于WiredTiger的oplog进行完全验证时跳过更彻底的检查。在 validate.warnings 中包含有关该行为的说明。

  • 如果 false,则省略一些检查以实现更快的但不太彻底的检查。

默认为 false

对于WiredTiger存储引擎,只有完整的验证过程会在验证磁盘上的数据之前强制执行检查点并将所有内存数据刷新到磁盘。

布尔值

可选。一个标志,用于确定命令是否执行修复。

  • 如果 true,则执行修复。

  • 如果 false,则不执行修复。

默认为 false

修复只能在独立节点上运行。

修复以下问题

  • 如果找到缺失的索引条目,将缺失的键插入索引中。

  • 如果找到多余的索引条目,将从索引中删除多余的键。

  • 如果找到对于非多键索引的索引的多键文档,则将索引更改为多键索引。

  • 如果找到未指定在索引的多键路径中的多键文档,则更新索引的多键路径。

  • 如果找到具有无效BSON数据的数据损坏的文档,则删除这些文档。

有关更多信息,请参阅 --repair 选项的 mongod

5.0.

布尔值

可选。一个标志,允许用户快速验证以检测无效的索引选项,而无需扫描所有文档和索引。

  • 如果 true,则执行元数据验证扫描。

  • 如果 false,则不执行元数据验证扫描。

默认为 false

使用 { metadata: true } 运行 validate 命令不支持与其他任何 validate 选项一起使用。

The metadata 验证选项

  • 通过仅扫描集合元数据,为您提供了一种更快地识别无效索引的方法。

  • 当与 collMod 命令一起使用时,提供了一种在不删除和重新创建多个无效索引的情况下进行选择的替代方案。

metadata 验证选项仅扫描集合元数据以更快地找到无效索引。

如果检测到无效索引,validate 命令将提示您使用 collMod 命令来删除无效索引。

db.runCommand( { collMod: <collectionName> } )

5.0.4.

布尔值

可选。如果设置为 true,则检查集合以确保 BSON 文档 符合 BSON 规范。检查会增加验证操作完成的时间。任何问题都会以警告的形式返回。

checkBSONConformance:

  • 默认值为 false

  • full 设置为 true 时启用。

  • 不能与

    • 设置为 truerepair 一起使用。

    • 设置为 truemetadata 一起使用。

6.2.

background
布尔值

可选。如果设置为 true,MongoDB 将在后台运行 validate 命令。如果设置为 false,则该命令将修复集合计数和数据大小的不一致性。

默认为 false

《validate》命令可能会很慢,尤其是在处理较大的数据集时。

《validate》命令会在集合上获得独占锁W。这将阻止在操作完成之前对集合的所有读取和写入操作。在辅助节点上运行时,validate操作可能会阻塞辅助节点上所有其他操作,直到其完成。

警告

由于验证对性能的影响,建议仅在辅助副本集节点上运行validate。您可以使用rs.stepDown()命令指示当前节点成为辅助节点,以避免影响活动的主节点。

$currentOpcurrentOp命令包括正在进行的验证操作的信息,如dataThroughputAveragedataThroughputLastSecond

验证操作的日志消息包括dataThroughputAveragedataThroughputLastSecond信息。

从MongoDB 6.2版本开始,validate命令和db.collection.validate()方法

  • 检查集合以确保BSON文档符合BSON规范。

  • 检查时间序列集合中的内部数据不一致性。

  • 新增了一个名为 checkBSONConformance 的选项,该选项可以启用全面的BSON检查。

validate 命令不再支持 afterClusterTime。因此,validate 不能与 因果一致性会话 关联。

从MongoDB 6.0版本开始,如果唯一索引的键格式不兼容,validate 命令会返回一条消息,表明使用了旧格式。

validate》命令更新集合的计数和数据大小统计信息,在collStats输出中使用正确的值。

注意

在出现非正常关闭的情况下,计数和数据大小统计信息可能不准确。

  • 使用默认验证设置(特别是,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.uuid

集合的全局唯一标识符(UUID)。

6.2.

validate.nInvalidDocuments

集合中无效文档的数量。无效文档是指不可读的文档,这意味着BSON文档已损坏或大小不匹配。

validate.nNonCompliantDocuments

不符合集合模式的文档数量。不符合规范的文档不计入 nInvalidDocuments.

从MongoDB 6.2版本开始,nNonCompliantDocuments 还包括不符合BSON时间序列集合要求的文档数量。

validate.nrecords

集合中的文档数量。

validate.nIndexes

已验证的集合索引数量。

validate.keysPerIndex

包含每个索引的名称和索引条目计数的一个文档。

"keysPerIndex" : {
"_id_" : <num>,
"<index2_name>" : <num>,
...
}

keysPerIndex 通过名称来识别索引。

validate.indexDetails

包含每个索引索引验证状态的文档。

"indexDetails" : {
"_id_" : {
"valid" : <boolean>
},
"<index2_name>" : {
"valid" : <boolean>
},
...
}
  • indexDetails标识了无效的特定索引(或索引)。MongoDB的早期版本在任一索引无效时,会将所有索引标记为无效。

  • indexDetails通过索引名称标识索引。MongoDB的早期版本显示索引的完整命名空间;即 <db>.<collection>.$<index_name>

validate.ns

集合的完整命名空间名称。命名空间包括数据库名和集合名,形式为 database.collection

validate.valid

一个布尔值,当 validate 确定集合的所有方面都有效时为 true。当为 false 时,请参阅 errors 字段以获取更多信息。

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 字段大小的总和有一个限制为 1MB,其中大小包括 indexKey 的键和值。如果总和超过此大小,则警告字段将显示一条消息。

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 字段大小的总和有一个限制为 1MB,其中字段大小包括 idKeyindexKey 的键和值。如果总和超过此大小,则警告字段将显示一条消息。

validate.corruptRecords

一个包含不可读文档的 RecordId 值的数组,可能是因为数据损坏。这些文档在验证过程中被报告为损坏。一个 RecordId 是一个唯一标识集合中文档的 64 位整数内部键。

"corruptRecords" : [
NumberLong(1), // RecordId 1
NumberLong(2) // RecordId 2
]

5.0.

validate.ok

当命令成功时,该整数值为 1。如果命令失败,则 ok 字段值为 0

返回

顶部