validate
定義
バージョン 6.2 での変更。
validate
validate
コマンドは、コレクションのデータとインデックスを正確性を確認し、結果を返します。Tip
mongosh
では、このコマンドはvalidate()
ヘルパー メソッドを通じて実行することもできます。ヘルパー メソッドは
mongosh
ユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。バージョン 5.0 での変更。
バージョン5.0以降では、
validate
コマンドでもコレクション内の不整合を見つけ、可能であれば修正することができます。インデックスの不一致には、次のものが含まれます。
インデックスはマルチキーですが、マルチキー フィールドはありません。
インデックスには、マルチキーではないフィールドをカバーするmultikeyPathがあります。
インデックスにmultikeyPathsはありませんが、マルチキー ドキュメントは存在します( 3.4 以前にビルドされたインデックスの場合)。
db.collection.validate()
コマンドによって不整合が検出された場合は、警告が返され、インデックスの修復フラグはtrue
に設定されます。db.collection.validate()
は、コレクションのスキーマ検証ルールに違反するドキュメントも検証します。db.collection.validate()
validate
のmongosh
メソッドは を囲むラッパーを提供します。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
重要
This command is not supported in M0, M2, and M5 clusters or in serverless instances. 詳細については、「サポートされていないコマンド 」を参照してください。
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 } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 | |
---|---|---|---|
| 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 の新機能。 |
動作
パフォーマンス
validate
コマンドは、特に大規模なデータセットで遅くなる可能性があります。
validate
コマンドは、コレクションに対して排他ロックW
を取得します。 これにより、操作が完了するまでコレクションに対するすべての読み取りと書込みがブロックされます。 セカンダリで実行する場合、 validate
操作は完了するまで、そのセカンダリに対する他のすべての操作をブロックする可能性があります。
警告
検証のパフォーマンスへの影響のため、validate
セカンダリ レプリカセット ノードのみで を実行することを検討してください。rs.stepDown()
を使用して現在のプライマリノードをセカンダリになるように指示し、ライブ プライマリ ノードに影響を与えないようにすることができます。
データスループット メトリクス
$currentOp
コマンドとcurrentOp
コマンドには、進行中の操作を検証するためのdataThroughputAverage
とdataThroughputLastSecond
情報が含まれています。
検証操作のログ メッセージには、 dataThroughputAverage
とdataThroughputLastSecond
の情報が含まれます。
コレクション検証の改善
MongoDB 6.2以降では、 validate
コマンドとdb.collection.validate()
メソッドは次のようになります。
コレクションをチェックして、 BSON ドキュメントが BSON 仕様に準拠していることを確認します。
時系列コレクションの内部データの不整合をチェックします。
包括的な BSON チェックを可能にする新しいオプション
checkBSONConformance
が追加されました。
制限事項
validate
コマンドはafterClusterTimeのサポートを終了しました。 このため、 validate
は因果整合性のあるセッション に関連付けることはできません。
インデックスキーの形式
MongoDB 6.0 以降では、一意なインデックスに互換性のないキー形式がある場合、 validate
コマンドは メッセージを返します。 メッセージは古い形式が使用されていることを示します。
例
デフォルトの検証設定(具体的には、 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
各インデックスのインデックス検証のステータスを含むドキュメント。
"indexDetails" : { "_id_" : { "valid" : <boolean> }, "<index2_name>" : { "valid" : <boolean> }, ... } indexDetails
は、無効な特定のインデックスを識別します。 MongoDB の以前のバージョンでは、いずれかのインデックスが無効な場合、すべてのインデックスが無効としてマークされていました。indexDetails
はインデックスを名前のみで識別します。 MongoDB の以前のバージョンでは、インデックスの完全な名前空間が表示されていました。つまり<db>.<collection>.$<index_name>
です。
validate.valid
ブール値は
validate
がコレクションのすべての要素が有効であると判断した場合はtrue
です。false
の場合、詳細についてはerrors
フィールドを参照してください。
validate.repaired
ブール値は
validate
がコレクションを修復した場合はtrue
になります。
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
コレクションが有効でない場合(つまり、
valid
が false)、このフィールドには検証エラーを説明するメッセージが含まれます。
validate.extraIndexEntries
コレクションに存在しないドキュメントを指す各インデックスエントリの情報を含む配列。
"extraIndexEntries" : [ { "indexName" : <string>, "recordId" : <NumberLong>, // for the non-existent document "indexKey" : { "<key1>" : <value>, ... } } ... ] 注意
extraIndexEntries
配列の場合、すべてのindexKey
フィールド サイズの合計は1 MB の制限であり、サイズにはindexKey
のキーと値の両方が含まれます。 合計がこのサイズを超えると、警告フィールドにメッセージが表示されます。
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 MB の制限があり、フィールド サイズにはidKey
とindexKey
のキーと値の両方が含まれます。 . 合計がこのサイズを超えると、警告フィールドにメッセージが表示されます。
validate.corruptRecords
データが破損している可能性があり、読み取りできないドキュメントの
RecordId
値の配列。 これらのドキュメントは検証中に破損しているとして報告されます。RecordId
は、コレクション内のドキュメントを一意に識別する 64 ビットの整数内部キーです。"corruptRecords" : [ NumberLong(1), // RecordId 1 NumberLong(2) // RecordId 2 ] バージョン 5.0 で追加
validate.ok
コマンドが成功した場合の値
1
を持つ整数。 コマンドが失敗した場合、ok
フィールドの値は0
になります。