指定允许的字段值
当创建 JSON schema 时,可以指定特定字段中允许使用哪些值。使用此功能可确保您的字段值处于一组预期值内,例如国家/地区列表。同样,将数据插入到一个集合中时,可以使用此功能防止人为错误,例如拼写错误。
上下文
要指定允许值的列表,请在 JSON 模式中使用 enum
关键字。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" } } } } } )
country
对象中的 enum
字段仅允许 country
字段为 France
、United
Kingdom
或 United States
的文档。
2
确认验证可以防止无效文档。
以下插入操作失败,因为 country
是 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