Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

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()は、コレクションのスキーマ検証ルールに違反するドキュメントも検証します。

注意

validateコマンドはビューをサポートしていないため、ビューに対して実行するとエラーが発生します。

db.collection.validate()validatemongosh メソッドは を囲むラッパーを提供します。

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

  • 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
background: <boolean> // Optional
}
)

このコマンドは、次のフィールドを使用します。

フィールド
タイプ
説明
validate
string
検証するコレクションの名前。
ブール値

任意。 A flag that determines whether the command performs a slower but more thorough check or a faster but less thorough check.

  • trueの場合、 はより詳細なチェックを実行しますが、次の例外があります。

    • WiredTiger のoplogで完全に検証されると、より詳細なチェックがスキップされます。 validate.warningsには の動作に関する通知が含まれています。

  • falseの場合、 は一部のチェックを省略することで、チェックが高速化されますが、完全性は低下します。

デフォルトは false です。

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

ブール値

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

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

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

デフォルトは false です。

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

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

  • 欠落しているインデックスエントリが見つかった場合は、欠落しているキーがインデックスに挿入されます。

  • 余計なインデックスエントリが見つかった場合は、余計なキーはインデックスから削除されます。

  • マルチキー インデックスではないインデックスでマルチキードキュメントが見つかった場合、そのインデックスはマルチキー インデックスに変更されます。

  • インデックスのマルチキー パスで指定されていないマルチキードキュメントが見つかった場合、インデックスのマルチキー パスが更新されます。

  • BSON データが無効な破損したドキュメントが見つかった場合、ドキュメントは削除されます。

Tip

以下も参照してください。

--repair の オプション mongod

バージョン 5.0 で追加

ブール値

任意。 すべてのドキュメントとインデックスをスキャンすることなく、無効なインデックス オプションを検出するために迅速な検証を実行できるようにするフラグ。

  • trueの場合、メタデータ検証スキャンが実行されます。

  • falseの場合、メタデータ検証スキャンは実行されません。

デフォルトは false です。

{ metadata: true }を使用して検証コマンドを実行することは、他のvalidateオプションではサポートされていません。

metadata検証オプションは次の操作を行います。

  • コレクションのメタデータのみをスキャンして、無効なインデックスを識別する迅速な方法を提供します。

  • collModコマンドで使用すると、複数の無効なインデックスを削除して再作成する代わりに提供します。

metadata検証オプションはコレクション メタデータのみをスキャンして、無効なインデックスをより迅速に見つけることができます。

無効なインデックスが検出された場合、検証コマンドは無効なインデックスを削除するためにcollModコマンドを使用するように要求します。

db.runCommand( { collMod: <collectionName> } )

バージョン 5.0.4 の新機能

ブール値

任意trueの場合、コレクションがチェックされ、 BSON ドキュメントが BSON 仕様に準拠していることを確認します。 チェックにより、検証操作を完了するための時間が長くなります。 問題は警告として返されます。

checkBSONConformance:

  • デフォルトは、false に設定されています。

  • fulltrueに設定されていると有効になります。

  • 次の場合は使用できません。

    • repair true に設定します。

    • metadata true に設定します。

バージョン 6.2 の新機能

background
ブール値

任意trueの場合、MongoDB はバックグラウンドでvalidateコマンドを実行します。 falseの場合、コマンドはコレクションのカウントとデータサイズの不整合を修復します。

デフォルトは false です。

validateコマンドは、特に大規模なデータセットで遅くなる可能性があります。

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

警告

検証のパフォーマンスへの影響のため、validate セカンダリ レプリカセット ノードのみで を実行することを検討してください。rs.stepDown()を使用して現在のプライマリノードをセカンダリになるように指示し、ライブ プライマリ ノードに影響を与えないようにすることができます。

$currentOpコマンドとcurrentOpコマンドには、進行中の操作を検証するためのdataThroughputAveragedataThroughputLastSecond情報が含まれています。

検証操作のログ メッセージには、 dataThroughputAveragedataThroughputLastSecondの情報が含まれます。

MongoDB 6.2以降では、 validateコマンドとdb.collection.validate()メソッドは次のようになります。

  • コレクションをチェックして、 BSON ドキュメントが BSON 仕様に準拠していることを確認します。

  • 時系列コレクションの内部データの不整合をチェックします。

  • 包括的な BSON チェックを可能にする新しいオプションcheckBSONConformanceが追加されました。

validateコマンドはafterClusterTimeのサポートを終了しました。 このため、 validate因果整合性のあるセッション に関連付けることはできません。

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.uuid

コレクションの 汎用一意識別子(UUID) 。

バージョン 6.2 の新機能

validate.nInvalidDocuments

コレクション内の 無効な ドキュメントの数。 無効なドキュメントとは、読み取れないドキュメントとはなります。つまり、 BSONドキュメントが破損しており、エラーまたはサイズが一致していないことを意味します。

validate.nNonCompliantDocuments

コレクションのスキーマに準拠していないドキュメントの数。 準拠していないドキュメントは、 nInvalidDocumentsでは無効としてカウントされません。

MongoDB 6.2 以降では、 nNonCompliantDocumentsにはBSONまたは時系列コレクションの要件に準拠していないドキュメントの数も含まれます。

validate.nrecords

コレクション内のドキュメントの数。

validate.nIndexes

検証されたコレクションのインデックスの数。

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.ns

コレクションの完全な名前空間名。 名前空間には、データベース名とコレクション名がdatabase.collection形式で含まれます。

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 の制限があり、フィールド サイズにはidKeyindexKeyのキーと値の両方が含まれます。 . 合計がこのサイズを超えると、警告フィールドにメッセージが表示されます。

validate.corruptRecords

データが破損している可能性があり、読み取りできないドキュメントのRecordId値の配列。 これらのドキュメントは検証中に破損しているとして報告されます。 RecordIdは、コレクション内のドキュメントを一意に識別する 64 ビットの整数内部キーです。

"corruptRecords" : [
NumberLong(1), // RecordId 1
NumberLong(2) // RecordId 2
]

バージョン 5.0 で追加

validate.ok

コマンドが成功した場合の値1を持つ整数。 コマンドが失敗した場合、 okフィールドの値は0になります。

戻る

top