Docs HomeMongoDB Manual

db.collection.validate()

Description描述

Changed in version 6.2.6.2版更改。

db.collection.validate(<documents>)
Important

mongosh Method

This page documents a mongosh method. 本页记录了一个mongosh方法。This is not the documentation for database commands or language-specific drivers, such as Node.js.不是数据库命令或特定语言驱动程序(如Node.js)的文档。

For the database command, see the validate command.

For MongoDB API drivers, refer to the language-specific MongoDB driver documentation.

For the legacy mongo shell documentation, refer to the documentation for the corresponding MongoDB Server release:

mongo shell v4.4

Validates a collection. 验证集合。The method scans a collection data and indexes for correctness and returns the result. 该方法扫描集合数据和索引的正确性并返回结果。For details of the output, see Validate Output.有关输出的详细信息,请参阅验证输出

Starting in version 5.0, the db.collection.validate() method can also fix inconsistencies in the collection.从版本5.0开始,db.collection.validate()方法还可以修复集合中的不一致。

Index inconsistencies include:索引不一致包括:

  • An index is multikey but there are no multikey fields.索引是多键的,但没有多键字段。
  • An index has multikeyPaths covering fields that are not multikey.索引具有覆盖非多键字段的多键路径
  • An index does not have multikeyPaths but there are multikey documents (for indexes built before 3.4).索引没有多键路径,但有多个键文档(对于3.4之前构建的索引)。

If any inconsistencies are detected by the db.collection.validate() command, a warning is returned and the repair flag on the index is set to true.如果db.collection.validate()命令检测到任何不一致,则会返回一个警告,并将索引上的修复标志设置为true

db.collection.validate() also validates any documents that violate the collection's schema validation rules.还验证任何违反集合的架构验证规则的文档。

The db.collection.validate() method is a wrapper around the validate command.db.collection.validate()方法是validate命令的包装器。

Syntax语法

Note

Changed in version 4.4

db.collection.validate() no longer accepts just a boolean parameter. See db.collection.validate() Parameter Change.不再只接受布尔参数。请参见db.collection.validate()参数更改

The db.collection.validate() method has the following syntax: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
} )

Parameters参数

The db.collection.validate() method can take the following optional document parameter with the fields:db.collection.validate()方法可以在字段中采用以下可选文档参数:

Field字段Type类型Description描述
fullbooleanOptional.可选的。A flag that determines whether the command performs a slower but more thorough check or a faster but less thorough check. 一个标志,用于确定命令是执行较慢但更彻底的检查,还是执行较快但不太彻底的检查。
  • If true, performs a more thorough check with the following exception: 如果为true,则执行更彻底的检查,但出现以下异常:
    • Starting in MongoDB 4.4, full validation on the oplog for WiredTiger skips the more thorough check.从MongoDB 4.4开始,WiredTiger的oplog上的完整验证跳过了更彻底的检查。
  • If false, omits some checks for a faster but less thorough check.如果为false,则省略一些检查以进行更快但不太彻底的检查。
The default is false.默认值为false
Starting in MongoDB 3.6, for the WiredTiger storage engine, only the full validation process will force a checkpoint and flush all in-memory data to disk before verifying the on-disk data.从MongoDB 3.6开始,对于WiredTiger存储引擎,只有full验证过程才会强制执行检查点,并在验证磁盘上的数据之前将所有内存中的数据刷新到磁盘。
In previous versions, the data validation process for the WT storage engine always forces a checkpoint. 在以前的版本中,WT存储引擎的数据验证过程总是强制执行检查点。
repairbooleanOptional.可选的。A flag that determines whether the command performs a repair. 用于确定命令是否执行修复的标志。
  • If true, a repair is performed.如果为true,则执行修复。
  • If false, no repair is performed.如果为false,则不执行任何修复。
The default is false.默认值为false
A repair can only be run on a standalone node.修复只能在独立节点上运行。
The repair fixes these issues: 修复修复了以下问题:
  • If missing index entries are found, the missing keys are inserted into the index.如果找到丢失的索引项,则会将丢失的键插入索引中。
  • If extra index entries are found, the extra keys are removed from the index.如果找到额外的索引项,则会从索引中删除额外的键。
  • If multikey documents are found for an index that is not a multikey index, the index is changed to a multikey index.如果为不是多键索引的索引找到了多键文档,则该索引将更改为多键索引。
  • If multikey documents are found that are not specified by an index's multikey paths, the index's multikey paths are updated.如果找到的多键文档不是由索引的多键路径指定的,则会更新索引的多键路径。
  • If corrupt documents with invalid BSON data are found, the documents are removed.如果发现带有无效BSON数据的损坏文档,则会删除这些文档。
Tip

See also: 另请参阅:

--repair option for mongod mongod--repair选项
New in version 5.0. 5.0版新增。
checkBSONConformancebooleanOptional.可选的。If true, the collection is checked to ensure the BSON documents conform to the BSON specifications. 如果为true,则检查集合以确保BSON文档符合BSON规范。The checks increase the time to complete the validation operation. 检查增加了完成验证操作的时间。Any issues are returned as a warning.任何问题都将作为警告返回。
checkBSONConformance:
  • Default is false.默认值为false
  • Is enabled when full is set to true.full设置为true时启用。
  • Cannot be used with: 不能与以下内容一起使用:
    • repair set to true.设置为true
    • metadata set to true.设置为true

New in version 6.2. 6.2版新增。

Behavior行为

Performance性能

The db.collection.validate() method is potentially resource intensive and may impact the performance of your MongoDB instance, particularly on larger data sets.db.collection.validate()方法可能会占用大量资源,可能会影响MongoDB实例的性能,尤其是在较大的数据集上。

The db.collection.validate() method obtains an exclusive lock on the collection. db.collection.validate()方法获取集合的独占锁。This will block all reads and writes on the collection until the operation finishes. When run on a secondary, the operation can block all other operations on that secondary until it finishes.这将阻止对集合的所有读取和写入,直到操作完成。在辅助设备上运行时,该操作可以阻止该辅助设备上的所有其他操作,直到完成为止。

Warning

Validation has exclusive lock requirements that affect performance on primaries and on secondaries that are servicing reads. 验证具有独占锁定要求,这些要求会影响为读取提供服务的主服务器和辅助服务器的性能。Consider only running db.collection.validate() on nodes that are not servicing reads or writes.请考虑仅在不提供读写服务的节点上运行db.collection.validate()

To minimize impact on the primary, the majority of the data-bearing (non-arbiter), voting members in the cluster must be available and must not have significant replication lag.为了最大限度地减少对主节点的影响,集群中的大多数数据承载(非仲裁器)、投票成员必须可用,并且不能有显著的复制滞后。

To minimize the impact of the validation operation on client applications, run db.collection.validate() on a secondary node that is not servicing read requests. 为了最大限度地减少验证操作对客户端应用程序的影响,请在不为读取请求提供服务的辅助节点上运行db.collection.validate()You can convert the current primary node to a secondary node, by running the rs.stepDown() method.可以通过运行rs.stepDown()方法将当前主节点转换为辅助节点。

To completely isolate the db.collection.validate() operation from client traffic, choose one of the following options:要将db.collection.validate()操作与客户端流量完全隔离,请选择以下选项之一:

Data Throughput Metrics数据吞吐量指标

Starting in version MongoDB 4.4,从MongoDB 4.4版本开始,

Collection Validation Improvements集合验证改进

Starting in MongoDB 6.2, the validate command and db.collection.validate() method:从MongoDB 6.2开始,validate命令和db.collection.validate()方法:

  • Check collections to ensure the BSON documents conform to the BSON specifications.检查集合以确保BSON文档符合BSON规范。
  • Check time series collections for internal data inconsistencies.检查时间序列集合是否存在内部数据不一致。
  • Have a new option checkBSONConformance that enables comprehensive BSON checks.有一个新的选项checkBSONConformance,可以进行全面的BSON检查。

Examples实例

  • To validate a collection myCollection using the default validation setting (specifically, full: false):要使用默认验证设置(特别是full:false)验证集合myCollection,请执行以下操作:

    db.myCollection.validate()

    db.myCollection.validate({ })

    db.myCollection.validate( { full: false } )
  • To perform a full validation of collection myCollection, specify full: true:要对集合myCollection执行完全验证,请指定full:true:

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

    db.myCollection.validate( { repair: true } )
  • To perform additional BSON conformance checks in myCollection, specify checkBSONConformance: true:要在myCollection中执行其他BSON一致性检查,请指定checkBSONConformance:true:

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

For details of the output, see Validate Output.有关输出的详细信息,请参阅验证输出