绕过架构验证

在某些情况下,您可能需要绕过集合的架构验证规则。例如,如果您要将可能无效的数据从备份恢复到具有验证规则的集合。在这种情况下,旧文档可能无法满足新的验证要求。

语境

绕过模式验证是在每个操作的基础上完成的。如果您绕过架构验证以插入无效文档,则以后对无效文档的任何更新都必须:

  • 也绕过架构验证
  • 结果是一个有效的文件

支持的操作

您可以使用以下命令和方法绕过每个操作的验证:

先决条件

对于已启用访问控制的部署,要绕过文档验证,经过身份验证的用户必须有 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' }
   }
]

学到更多

参见

原文:Bypass Schema Validation

译者:景圣

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""