指定允许的字段值
当你创建一个JSON 模式时,你可以指定特定字段允许的值。使用此功能确保你的字段值属于预期值集,例如国家列表。同样,你可以使用此功能防止在向集合插入数据时出现人为错误,如拼写错误。
上下文
要指定一组允许的值,请在您的 JSON 模式中使用 enum
关键字。关键字 enum
表示“枚举”,用于列出字段的可能值。enum
字段仅允许文档中的 country
字段为 France
、United Kingdom
或 United States
。
步骤
例如,一家只向法国、英国和美国运送产品的服装公司。在验证器中,您可以列出允许的国家值并拒绝指定不同国家的文档。
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