Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

db.collection.validate()

带驱动程序的 MongoDB

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala
db.collection.validate(<documents>)

验证集合。 该方法扫描集合数据和索引以确保其正确性,并返回结果。 有关输出的详细信息,请参阅 验证输出。

从 5.0 版开始,db.collection.validate() 方法还可以修复集合中的不一致性。

索引不一致包括:

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

  • 索引具有多键路径,涵盖非多键字段。

  • 索引没有多键路径,但有多键文档(适用于 3.4 之前构建的索引)。

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

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

db.collection.validate() 方法是对 validate 命令的封装。

此方法可用于以下环境中托管的部署:

注意

所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令

db.collection.validate() 方法使用的语法如下:

db.collection.validate( {
full: <boolean>, // Optional
repair: <boolean> // Optional, added in MongoDB 5.0
} )

db.collection.validate() 方法可以使用以下带有字段的可选文档参数:

字段
类型
说明

布尔

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

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

    • 对 WiredTiger 的 oplog 进行全面验证会跳过更彻底的检查。

  • 如果为 false,则省略某些检查,以进行更快但不太彻底的检查。

默认为 false

对于WiredTiger存储引擎,只有full验证进程会在验证磁盘数据之前强制设置检查点并将所有内存中数据刷新到磁盘。

布尔

可选。确定命令是否执行修复的标志。

  • 如果为 true,则执行修复。

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

默认为 false

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

此修复修复以下问题:

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

  • 如果找到额外的索引条目,则从索引中删除额外的键。

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

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

  • 如果发现包含无效 BSON 数据的损坏文档,则会删除这些文档。

有关详细信息,请参阅 的--repair 选项mongod

版本 5.0 中的新增功能

db.collection.validate() 方法可能会占用大量资源,并可能影响 MongoDB 实例的性能,尤其是在较大的数据集上。

db.collection.validate() 方法可获得对集合的独占锁。此操作会阻塞对集合的所有读写操作,直到完成为止。在辅助节点上运行时,该操作会阻塞该辅助节点上的所有其他操作,直到完成为止。

警告

验证具有影响性能的独占锁要求。 请考虑仅在不提供读写服务的节点上运行db.collection.validate()

要隔离验证操作对客户端应用程序的影响,请在辅助节点上运行db.collection.validate()

从节点(secondary node from replica set)节点转换为副本集隐藏节点,并使用隐藏节点进一步隔离db.collection.validate()操作。

提示

使用rs.stepDown()将当前主节点 (primary node in the replica set)节点转换为从节点(secondary node from replica set)节点。

$currentOpcurrentOp 命令包含用于正在进行的验证操作的 dataThroughputAveragedataThroughputLastSecond 信息。

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

  • 要使用默认验证设置(特别是 full: false)验证集合 myCollection

    db.myCollection.validate()
    db.myCollection.validate({ })
    db.myCollection.validate( { full: false } )
  • 要对集合 myCollection 执行全面验证,请指定 full: true

    db.myCollection.validate( { full: true } )
  • 要修复集合 myCollection,请指定 repair: true

    db.myCollection.validate( { repair: true } )

有关输出的详细信息,请参阅“验证输出”。

后退

db.collection.updateOne

在此页面上