文档菜单
文档首页
/
MongoDB 手册
/ / /

指定允许的字段值

在本页

  • 上下文
  • 步骤

当你创建一个JSON 模式时,你可以指定特定字段允许的值。使用此功能确保你的字段值属于预期值集,例如国家列表。同样,你可以使用此功能防止在向集合插入数据时出现人为错误,如拼写错误。

要指定一组允许的值,请在您的 JSON 模式中使用 enum 关键字。关键字 enum 表示“枚举”,用于列出字段的可能值。enum 字段仅允许文档中的 country 字段为 FranceUnited KingdomUnited States

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

1

创建一个 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 字段为 FranceUnited KingdomUnited 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

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'
}
]

返回

指定 JSON 验证