AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

スキーマ検証のバイパス

状況によっては、コレクションのスキーマ検証ルールをバイパスする必要がある場合があります。 たとえば、バックアップから検証ルールのあるコレクションに無効な可能性のあるデータを復元する場合。 このシナリオでは、古いドキュメントが新しい検証要件を満たさない可能性があります。

スキーマ検証のバイパスは操作ごとに行われます。 無効なドキュメントを挿入するためにスキーマの検証をバイパスする場合、無効なドキュメントに対する将来の更新は次のいずれかになります。

  • スキーマ検証もバイパスします

  • 有効なドキュメントが生成される

コレクションの validationLevel が constraint である場合、または prepareConstraintValidationLevel が true である場合、MongoDB は bypassDocumentValidation を true に設定する書き込み (write) 操作を拒否します。ドキュメントが検証ルールを満たしている場合でも、書き込み (write) は失敗します。

{ ok: 0, errmsg: "bypassDocumentValidation is not permitted with 'constraint' validationLevel", code: 2, codeName: "BadValue"}

prepareConstraintValidationLevel が true の場合、書き込み (write) は別のメッセージで失敗します。そのメッセージには prepareConstraintValidationLevel が記載されており、それをクリアするコマンドが示されています。どちらの失敗も BadValue エラーコードを使用します。

検証をバイパスする能力を復元するには、collMod:を使用してコレクションを更新します。

  • コレクションの validationLevel が constraint の場合は、strict に設定します。

  • コレクションの prepareConstraintValidationLevel が true の場合は、false に設定します。

バージョン9.0の新機能。

次のコマンドとメソッドを使用して、操作ごとに検証をバイパスできます。

アクセス制御が有効になっている配置でドキュメント検証をバイパスするには、認証されたユーザーはbypassDocumentValidationアクションを持っている必要があります。 組み込みロールdbAdminとrestoreはこのアクションを提供します。

次の例では、スキーマ検証を含む コレクションを作成し、検証ルールをバイパスして無効なドキュメントを挿入しています。

1

students コレクションを作成し、$jsonSchema 演算子を使用してスキーマ検証を設定します。

db.createCollection("students", { validator: { $jsonSchema: { bsonType: "object", required: [ "name", "year", "major", "address" ], properties: { name: { bsonType: "string", description: "must be a string and is required" }, year: { bsonType: "int", minimum: 2017, maximum: 3017, description: "must be an integer in [ 2017, 3017 ] and is required" } } } }} )
2

次のドキュメントは、 yearフィールドが許可の範囲外にあるため無効です( 2017 - 3017 )。

{ name: "Alice", year: Int32( 2016 ), major: "History", gpa: Double(3.0), address: { city: "NYC", street: "33rd Street" }}

検証ルールをバイパスして無効なドキュメントを挿入するには、次のinsertコマンドを実行し、 bypassDocumentValidationオプションをtrueに設定します。

db.runCommand( { insert: "students", documents: [ { name: "Alice", year: Int32( 2016 ), major: "History", gpa: Double(3.0), address: { city: "NYC", street: "33rd Street" } } ], bypassDocumentValidation: true} )

ドキュメントが正常に挿入されたことを確認するには、students コレクションをクエリします。

db.students.find()

MongoDB は挿入されたドキュメントを返します。

[ { _id: ObjectId("62bcb4db3f7991ea4fc6830e"), name: 'Alice', year: 2016, major: 'History', gpa: 3, address: { city: 'NYC', street: '33rd Street' } }]