Docs Menu

db.collection.validate()

MongoDB とドライバー

このページではmongoshメソッドがドキュメントされています。 MongoDB ドライバーで同等のメソッドを確認するには、プログラミング言語の対応するページを参照してください。

db.collection.validate(<documents>)

コレクションを検証します。 メソッドは、コレクション データとインデックスをスキャンして正確性を確認し、結果を返します。 出力の詳細については、「 出力の検証 」を参照してください。

バージョン5.0以降では、 db.collection.validate()メソッドでもコレクション内の不整合を修正できます。

インデックスの不一致には、次のものが含まれます。

  • インデックスはマルチキーですが、マルチキー フィールドはありません。

  • インデックスには、マルチキーではないフィールドをカバーするmultikeyPathがあります。

  • インデックスにmultikeyPathsはありませんが、マルチキー ドキュメントは存在します( 3.4 以前にビルドされたインデックスの場合)。

db.collection.validate()コマンドによって不整合が検出された場合は、警告が返され、インデックスの修復フラグはtrueに設定されます。

db.collection.validate()は、コレクションのスキーマ検証ルールに違反するドキュメントも検証します。

db.collection.validate()メソッドはvalidateコマンドのラッパーです。

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

注意

このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

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 storage engine の場合、ディスク上のデータを検証する前にチェックポイントが強制され、メモリ内のすべてのデータがディスクにフラッシュされるのはfull検証プロセスのみです。

ブール値

任意。 コマンドが修復を実行するかどうかを決定するフラグです。

  • trueの場合は修復が実行されます。

  • falseの場合、修復は実行されません。

デフォルトは false です。

修復はスタンドアロン ノードでのみ実行できます。

この修復により、次の問題が修正されます。

詳細については、 の--repair オプションを参照してくださいmongod

バージョン 5.0 で追加

db.collection.validate()メソッドはリソースを集中的に消費する可能性があり、特に大規模なデータセットでは MongoDB インスタンスのパフォーマンスに影響を与える可能性があります。

db.collection.validate()メソッドはコレクションに対して排他ロックを取得します。 これにより、操作が完了するまでコレクションに対するすべての読み取りと書込みがブロックされます。 セカンダリで実行すると、操作によって、完了するまでそのセカンダリ上の他のすべての操作がブロックされる可能性があります。

警告

検証には、プライマリと読み取りを処理しているセカンダリのパフォーマンスに影響する排他ロック要件があります。 読み取りまたは書込みを処理していないノードでdb.collection.validate()を実行することのみを検討してください。

プライマリへの影響を最小限に抑えるには、クラスター内のデータを保持する(非アービタ)投票ノードの過半数が使用可能であり、レプリケーションラグが大幅にでないようにする必要があります。

クライアント アプリケーションへの検証操作の影響を最小限に抑えるには、読み取りリクエストを処理していないセカンダリ ノードでdb.collection.validate()を実行します。 現在のプライマリ ノードをセカンダリ ノードに変換するには、 rs.stepDown()メソッドを実行します。

db.collection.validate()操作をクライアント トラフィックから完全に分離するには、次のいずれかのオプションを選択します。

$currentOpコマンドとcurrentOpコマンドには、進行中の操作を検証するための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を修復するには、修復: trueを指定します。

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

出力の詳細については、「 出力の検証 」を参照してください。