指定允许的字段值

创建JSON Schema时,您可以指定特定字段中允许的值。使用此功能可确保您的字段值属于一组预期的值,例如国家/地区列表。同样,您可以使用此功能来防止在将数据插入集合时出现人为错误,例如打字错误。

语境

要指定允许值的列表,enum请在 JSON 架构中使用关键字。关键字的enum意思是“枚举”,用于列出字段的可能值。

步骤

考虑一家只向法国、英国和美国运送产品的服装公司。在验证器中,您可以列出允许的国家/地区值并拒绝指定不同国家/地区的文档。

  1. 创建一个包含验证的集合enum

    创建一个shipping集合并使用$jsonSchema 运算符设置模式验证规则:

    db.createCollection("shipping", {
       validator: {
          $jsonSchema: {
             bsonType: "object",
             title: "Shipping Country Validation",
             properties: {
                country: {
                   enum: [ "France", "United Kingdom", "United States" ],
                   description: "Must be either France, United Kingdom, or United States"
                }
             }
          }
       }
    } )
    

    对象中的enum字段country仅允许country字段为FranceUnited Kingdom或的文档United States

  2. 确认验证可防止无效文档

    以下插入操作失败,因为countryis Germany不在允许值列表中。

    db.shipping.insertOne( {
       item: "sweater",
       size: "medium",
       country: "Germany"
    } )
    

    该操作返回此错误:

    MongoServerError: Document failed validation
    Additional information: {
      failingDocumentId: ObjectId("630d1057931191850b40d0aa"),
      details: {
        operatorName: '$jsonSchema',
        title: 'Shipping Country Validation',
        schemaRulesNotSatisfied: [
          {
            operatorName: 'properties',
            propertiesNotSatisfied: [
              {
                propertyName: 'country',
                description: 'Must be either France, United Kingdom, or United States',
                details: [
                  {
                    operatorName: 'enum',
                    specifiedAs: {
                      enum: [ 'France', 'United Kingdom', 'United States' ]
                    },
                    reason: 'value was not found in enum',
                    consideredValue: 'Germany'
                  }
                ]
              }
            ]
          }
        ]
      }
    }
    
  3. 插入有效文档

    country字段更改为允许的值之一后,插入成功:

    db.shipping.insertOne( {
       item: "sweater",
       size: "medium",
       country: "France"
    } )
    
  4. 查询有效文件

    要确认文档已成功插入,请查询 shipping集合:

    db.shipping.find()
    

    MongoDB 返回文档:

    [
      {
        _id: ObjectId("630d10d5931191850b40d0ab"),
        item: 'sweater',
        size: 'medium',
        country: 'France'
      }
    ]
    

参见

原文:Specify Allowed Field Values

译者:景圣

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

results matching ""

    No results matching ""