指定允许的字段值
创建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。确认验证可防止无效文档。
以下插入操作失败,因为
countryisGermany不在允许值列表中。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
译者:景圣