指定允许的字段值
创建JSON Schema时,您可以指定特定字段中允许的值。使用此功能可确保您的字段值属于一组预期的值,例如国家/地区列表。同样,您可以使用此功能来防止在将数据插入集合时出现人为错误,例如打字错误。
语境
要指定允许值的列表,enum
请在 JSON 架构中使用关键字。关键字的enum
意思是“枚举”,用于列出字段的可能值。
步骤
考虑一家只向法国、英国和美国运送产品的服装公司。在验证器中,您可以列出允许的国家/地区值并拒绝指定不同国家/地区的文档。
创建一个包含验证的集合
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
字段为France
、United Kingdom
或的文档United States
。确认验证可防止无效文档。
以下插入操作失败,因为
country
isGermany
不在允许值列表中。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' } ] } ] } ] } }
插入有效文档。
将
country
字段更改为允许的值之一后,插入成功:db.shipping.insertOne( { item: "sweater", size: "medium", country: "France" } )
查询有效文件。
要确认文档已成功插入,请查询
shipping
集合:db.shipping.find()
MongoDB 返回文档:
[ { _id: ObjectId("630d10d5931191850b40d0ab"), item: 'sweater', size: 'medium', country: 'France' } ]
参见
原文:Specify Allowed Field Values
译者:景圣