定義
バージョン6.2で変更。
validatevalidateコマンドは、コレクションのデータとインデックスをチェックし、結果を正確に返します。コマンドは、コレクションのカウントとデータ サイズの不整合も修復します。Tip
mongoshでは、このコマンドはvalidate()ヘルパーメソッドを通じて実行することもできます。ヘルパー メソッドは
mongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、データベースコマンドを使用します。バージョン5.0で変更。
バージョン5.0 以降では、
validateコマンドでもコレクション内の不整合を検出し、可能であれば修正することができます。インデックスの不一致には、次のものが含まれます。
インデックスはマルチキーですが、マルチキー フィールドはありません。
インデックスには、マルチキーではないフィールドをカバーするmultikeyPathがあります。
インデックスにmultikeyPathsはありませんが、マルチキー ドキュメントは存在します( 3.4 以前にビルドされたインデックスの場合)。
db.collection.validate()コマンドによって不整合が検出された場合は、警告が返され、インデックスの修復フラグはtrueに設定されます。db.collection.validate()は、コレクションのスキーマ検証ルールに違反するドキュメントも検証します。注意
validateコマンドはビューをサポートしていないため、ビューに対して実行するとエラーが発生します。db.collection.validate()validateのmongoshメソッドは を囲むラッパーを提供します。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです
重要
このコマンドは、M0 および Flex クラスターではサポートされていません。詳細については、サポートされていないコマンド を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
このコマンドの構文は、次のとおりです。
db.runCommand( { validate: <string>, // Collection name full: <boolean>, // Optional repair: <boolean>, // Optional, added in MongoDB 5.0 metadata: <boolean>, // Optional, added in MongoDB 5.0.4 checkBSONConformance: <boolean> // Optional, added in MongoDB 6.2 background: <boolean> // Optional } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 | |
|---|---|---|---|
| string | 検証するコレクションの名前。 | |
| ブール値 | 任意。 A flag that determines whether the command performs a slower but more thorough check or a faster but less thorough check.
デフォルトは WiredTiger storage engine の場合、ディスク上のデータを検証する前にチェックポイントが強制され、メモリ内のすべてのデータがディスクにフラッシュされるのは | |
| ブール値 | 任意。 コマンドが修復を実行するかどうかを決定するフラグです。
デフォルトは 修復はスタンドアロン ノードでのみ実行できます。 修復により、次の問題が修正されます。
重要: 詳細については、 の バージョン 5.0 の新機能。 | |
| ブール値 | 任意。 すべてのドキュメントとインデックスをスキャンすることなく、無効なインデックス オプションを検出するために迅速な検証を実行できるようにするフラグ。
デフォルトは を使用して検証コマンドを実行することは、他の
無効なインデックスが検出された場合、検証コマンドは無効なインデックスを削除するために バージョン5.0.4の新機能。 | |
| ブール値 | 任意。
バージョン6.2の新機能。 | |
| ブール値 | 任意 。
デフォルトは バージョン8.1の新機能。 |
動作
パフォーマンス
validateコマンドは、特に大規模なデータセットで遅くなる可能性があります。
validateWコマンドは、コレクションに対して排他ロック を取得します。これにより、操作が完了するまでコレクションに対するすべての読み取りと書込みがブロックされます。セカンダリで実行する場合、validate 操作は完了するまで、そのセカンダリ上の他のすべての操作をブロックする可能性があります。
警告
検証のパフォーマンスへの影響を考慮して、セカンダリレプリカセットノードのみでvalidate を実行中を検討してください。 を使用して、現在のプライマリノードをセカンダリ になるように指示し、ライブ プライマリノードrs.stepDown() に影響を与えないようにすることができます。
データスループット メトリクス
$currentOpコマンドとcurrentOpコマンドには、進行中の操作を検証するためのdataThroughputAverageとdataThroughputLastSecond情報が含まれています。
検証操作のログ メッセージには、 dataThroughputAverageとdataThroughputLastSecondの情報が含まれます。
コレクション検証の改善
MongoDB6.2 以降では、validate コマンドとdb.collection.validate() メソッドは次のようになります。
コレクションをチェックして、 BSON ドキュメントが BSON 仕様に準拠していることを確認します。
時系列コレクションの内部データの不整合をチェックします。
包括的な BSON チェックを可能にする新しいオプション
checkBSONConformanceが追加されました。
MongoDB 8.3 以降では、validate コマンドと db.collection.validate() メソッドでコレクションをチェックし、コレクションに 16 MB を超える document がないことを確認します。
制限事項
コマンドはvalidate afterClusterTime のサポートを終了しました。このため、validate は因果整合性のあるセッションに関連付けることはできません。
時系列コレクションはMongoDB 5.0 で導入されました。v5.2 以降では、時系列測定値を保存するためのデフォルトの内部形式が変更されました。この変更により:
v5.2 より前に作成された時系列コレクションには、古い形式と新しい形式の両方のドキュメントが含まれる場合があります。内部的には、このようなコレクションには
timeseriesBucketsMayHaveMixedSchemaData: trueとしてフラグが付けられます。v5.2 以降で作成された時系列コレクションには、常に新しい形式のドキュメントが含まれます。内部的には、このようなコレクションは
timeseriesBucketsMayHaveMixedSchemaData: falseとしてフラグされるか、まったくフラグが付けられません。
フラグが true の場合、時系列クエリは新しい形式と古い形式の両方を考慮します。フラグが false または欠落している場合、時系列クエリは新しい形式のみを考慮します。
SERVER-91194 52で説明されているバグのため、一部の条件下では フラグが失われる可能性があります。 v. より前に作成された時系列コレクションでこの状況が発生すると、読み取りクエリ結果が不完全になる可能性があります。つまり、ディスクに保存され続けても、一部のドキュメントが失われる可能性があります。
これにより影響を受けるかどうかを判断するには、時系列コレクションで validate を実行します。コレクションがバグの影響を受けている場合、コマンドはエラーを返します。この場合、あなたの読み取りクエリの結果が正しくない可能性があります。
影響を受ける場合は、修正バージョンにアップグレードし、影響を受けるコレクションごとに timeseriesBucketsMayHaveMixedSchemaData を true に設定して、コレクションに対する将来のクエリで正しい結果が返されるようにします。このプロセスの完全な手順は、 ここにあります。
インデックスキーの形式
MongoDB 6.0 以降では、一意なインデックスに互換性のないキー形式がある場合、 validateコマンドは メッセージを返します。 メッセージは古い形式が使用されていることを示します。
カウントとデータ サイズの統計
コマンドは、validate collStats出力のコレクションのカウントとデータサイズの統計を正しい値で更新します。
注意
シャットダウンが正常に行われない 場合、カウントおよびデータサイズの統計が不正確になる可能性があります。
例
デフォルトの検証設定(具体的には、 full: false )を使用してコレクション
myCollectionを検証するには次のようにします。db.runCommand( { validate: "myCollection" } ) コレクション
myCollectionの完全な検証を実行するには、 full: trueを指定します。db.runCommand( { validate: "myCollection", full: true } ) コレクション
myCollectionを修復するには、修復: trueを指定します。db.runCommand( { validate: "myCollection", repair: true } ) myCollectionコレクション内のメタデータを検証するには、 metadata: trueを指定します。db.runCommand( { validate: "myCollection", metadata: true } ) myCollectionで追加の BSON 準拠チェックを実行するには、 checkpointBSONConformance: trueを指定します。db.runCommand( { validate: "myCollection", checkBSONConformance: true } )
出力を検証する
注意
出力は、MongoDB インスタンスのバージョンと特定の構成によって異なる場合があります。
より詳細な出力を行うには、 full: trueを指定します。
validate.nInvalidDocumentsコレクション内の 無効な ドキュメントの数。 無効なドキュメントとは、読み取れないドキュメントとはなります。つまり、 BSONドキュメントが破損しており、エラーまたはサイズが一致していないことを意味します。
validate.nNonCompliantDocumentsコレクションのスキーマに準拠していないドキュメントの数。準拠していないドキュメントは、
nInvalidDocumentsでは無効としてカウントされません。MongoDB 6.2 以降では、
nNonCompliantDocumentsにはBSONまたは時系列コレクションの要件に準拠していないドキュメントの数も含まれます。
validate.nrecordsコレクション内のドキュメントの数。
validate.keysPerIndexコレクションの各インデックスの名前とインデックスエントリ数を含むドキュメント。
"keysPerIndex" : { "_id_" : <num>, "<index2_name>" : <num>, ... } keysPerIndexは、インデックスを名前のみで識別します。
validate.indexDetailsバージョン8.1で変更。
各インデックスのインデックス検証のステータスとインデックス仕様を含むドキュメント。
"indexDetails" : { "_id_" : { "valid" : <boolean>, "spec" : <document> }, "<index2_name>" : { "valid" : <boolean>, "spec" : <document> }, ... } indexDetailsは、無効な特定のインデックスを識別します。 MongoDB の以前のバージョンでは、いずれかのインデックスが無効な場合、すべてのインデックスが無効としてマークされていました。indexDetailsはインデックスを名前のみで識別します。 MongoDBの以前のバージョンでは、インデックスの完全な名前空間が表示されていました。つまり<db>.<collection>.$<index_name>。specドキュメントはインデックス仕様 です。これは、インデックスがどのように定義されているかによって異なります。specドキュメントフィールドの例には、次のようなものがあります。spec.v。インデックスのバージョン。spec.unique。インデックスが一意であるかどうかを示すブール値。spec.key。インデックスキー識別子。spec.name。インデックス名。
バージョン8.1の新機能。
validate.validtruevalidateブール値値は、 がコレクションのすべての要素が有効であると判断した場合、 になります。falseの場合、詳細についてはerrorsフィールドを参照してください。
validate.repairedブール値値は
truevalidateがコレクションを修復した場合は になります。
validate.repairModeバージョン8.2の新機能。
validateコマンドが修復を試みたデータタイプのデータ不整合が検出された場合は、 可能なrepairMode値は次のとおりです。None: 修復アクションは実行されません。FixErrors: 検証エラーの修正を試みます。AdjustMultikey: マルチキーのメタデータを調整して、マルチキーの不整合を修正しようとします。
validate.warnings検証操作自体に関する警告メッセージ(存在する場合)を含む配列。 警告メッセージは、コレクション自体が無効であることを示すものではありません。 例:
"warnings" : [ "Could not complete validation of table:collection-28-6471619540207520785. This is a transient issue as the collection was actively in use by other operations." ],
validate.errorsコレクションが有効でない場合(つまり、 が
validfalse)、このフィールドには検証エラーを説明するメッセージの配列が含まれます。
validate.extraIndexEntriesコレクションに存在しないドキュメントを指す各インデックスエントリの情報を含む配列。
"extraIndexEntries" : [ { "indexName" : <string>, "recordId" : <NumberLong>, // for the non-existent document "indexKey" : { "<key1>" : <value>, ... } } ... ] 注意
extraIndexEntries配列の場合、すべてのindexKeyフィールドサイズの合計は1 MBindexKeyの制限であり、サイズには のキーと値の両方が含まれます。合計がこのサイズを超えると、警告フィールドにメッセージが表示されます。
validate.missingIndexEntries対応するインデックスエントリが欠落している各ドキュメントの情報を含む配列。
"missingIndexEntries" : [ { "indexName" : <string>, "recordId" : <NumberLong>, "idKey" : <_id key value>, // The _id value of the document. Only present if an ``_id`` index exists. "indexKey" : { // The missing index entry "<key1>" : <value>, ... } } ... ] 注意
missingIndexEntries配列の場合、idKeyフィールドサイズとそのすべてのindexKeyフィールドサイズの合計は1 MBidKeyindexKeyの制限があり、フィールドサイズには と のキーと値の両方が含まれます。 }。合計がこのサイズを超えると、警告フィールドにメッセージが表示されます。
validate.corruptRecordsデータが破損している可能性があり、読み取りできないドキュメントの
RecordId値の配列。 これらのドキュメントは検証中に破損しているとして報告されます。RecordIdは、コレクション内のドキュメントを一意に識別する 64 ビットの整数内部キーです。"corruptRecords" : [ Long(1), // RecordId 1 Long(2) // RecordId 2 ] バージョン 5.0 の新機能。
validate.okコマンドが成功した場合の値
1を持つ整数。コマンドが失敗した場合、okフィールドの値は0になります。