db.collection.validate()

On this page本页内容

Description描述

db.collection.validate(<documents>)
Important重要
mongosh Method

This is a mongosh method. This is not the documentation for Node.js or other programming language specific driver methods.

In most cases, mongosh methods work the same way as the legacy mongo shell methods. However, some legacy methods are unavailable in mongosh.

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

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

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.索引的multikeyPaths覆盖的字段不是multikey
  • An index does not have multikeyPaths but there are multikey documents (for indexes built before 3.4).索引没有multikeyPaths,但有多键文档(对于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在版本4.4中更改

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

Changed in version 5.0.在版本5.0中更改

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
} )

Parameters参数

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

Field字段Type类型Description描述
fullboolean

Optional. 可选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存储引擎,只有完整的验证过程才会强制执行检查点,并在验证磁盘上的数据之前将所有内存中的数据刷新到磁盘上。

In previous versions, the data validation process for the WT storage engine always forces a checkpoint.在以前的版本中,WT存储引擎的数据验证过程总是强制使用检查点。

repairboolean

Optional. 可选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

New in version 5.0.在版本5.0中新增

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开始,

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 } )

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

←  db.collection.watch()Cursor Methods →