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

スキーマ検証のバイパス

項目一覧

  • Context
  • サポートされている操作
  • 前提条件
  • 手順
  • 結果
  • 詳細

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

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

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

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

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

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

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

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' }
}
]

戻る

無効なドキュメントの処理