“文档” 菜单
文档首页
/
MongoDB Manual
/ / /

db.collection.validate()

在此页面上

  • 说明
  • 语法
  • 行为
  • 举例

版本 6.2 中的更改

db.collection.validate(<documents>)

重要

mongosh 方法

本页面提供 mongosh 方法的相关信息。这不是数据库命令或特定语言驱动程序(例如 Node.js)的相关文档。

有关数据库命令,请参阅 validate命令。

如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。

对于传统 mongo Shell 文档,请参阅相应 MongoDB Server 版本的文档:

mongo shell v4.4

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

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

索引不一致包括:

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

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

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

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

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

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

注意

db.collection.validate() 不再只接受布尔参数。请参阅 db.collection.validate() 参数变更

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

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

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

字段
类型
说明
full
布尔

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

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

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

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

默认为 false

从 MongoDB 3.6 开始,对于 WiredTiger 存储引擎,只有 full 验证过程会在验证磁盘数据之前设置检查点并将所有内存数据刷新到磁盘。

在以前的版本中,WT 存储引擎的数据验证过程始终设置检查点。

布尔

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

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

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

默认为 false

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

此修复修复以下问题:

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

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

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

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

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

提示

另请参阅:

版本 5.0 中的新增功能

布尔

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

checkBSONConformance

  • 默认值为 false

  • full 设置为 true 时启用。

  • 在以下情况下无法使用:

    • repair 设置为 true

    • metadata 设置为 true

6.2 版本新增

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

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

警告

验证具有独占锁要求,会影响主节点和为读取提供服务的从节点的性能。考虑仅在不支持读取或写入的节点上运行 db.collection.validate()

为了最大限度地减少对主节点的影响,集群中的大多数数据承载(非仲裁节点)投票节点必须可用,并且不得有明显的复制延迟。

尽量减少验证操作对客户端应用程序的影响,请在不处理读取请求的从节点上运行 db.collection.validate()。您可以通过运行 rs.stepDown() 方法,将当前主节点转换为从节点。

要将 db.collection.validate() 操作与客户端流量完全隔离,请选择以下选项之一:

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

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

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

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

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

  • 有一个支持全面的 BSON 检查的新选项 checkBSONConformance

  • 要使用默认验证设置(特别是 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 } )
  • 要在 myCollection 中执行额外的 BSON 一致性检查,请指定 checkBSONConformance: true

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

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

← db.collection.watch()