定義
バージョン 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 配置のためのフルマネージド サービスです
重要
このコマンドは、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
コマンドは、特に大規模なデータセットで遅くなる可能性があります。
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 5.0 で導入されました。v5.2 以降では、時系列測定値を保存するためのデフォルトの内部形式が変更されました。この変更により:
v5.2 より前に作成された時系列コレクションには、古い形式と新しい形式の両方のドキュメントが含まれる場合があります。内部的には、このようなコレクションには
timeseriesBucketsMayHaveMixedSchemaData: true
としてフラグが付けられます。v5.2 以降で作成された時系列コレクションには、常に新しい形式のドキュメントが含まれます。内部的には、このようなコレクションは
timeseriesBucketsMayHaveMixedSchemaData: false
としてフラグされるか、まったくフラグが付けられません。
フラグが true
の場合、時系列クエリは新しい形式と古い形式の両方を考慮します。フラグが false
または欠落している場合、時系列クエリは新しい形式のみを考慮します。
SERVER-91194 で説明されているバグのため、一部の条件下では フラグが失われる可能性があります。これが v5.2 より前に作成された時系列コレクションで発生すると、読み取りクエリ結果が不完全になる場合があります。つまり、ディスクに保存され続けても、一部のドキュメントが失われる可能性があります。
これによる影響があるかどうかを判断するには、時系列コレクションで 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.valid
ブール値は
validate
がコレクションのすべての要素が有効であると判断した場合はtrue
です。false
の場合、詳細についてはerrors
フィールドを参照してください。
validate.repaired
ブール値は
validate
がコレクションを修復した場合はtrue
になります。
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
コレクションが有効でない場合(つまり、
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" : [ Long(1), // RecordId 1 Long(2) // RecordId 2 ] バージョン 5.0 で追加
validate.ok
コマンドが成功した場合の値
1
を持つ整数。 コマンドが失敗した場合、ok
フィールドの値は0
になります。