我正在创建具有房间类型(双人,单人,套间)的HOME集合验证,并且验证应允许添加列出的所有项目。
height: auto
这就是我在验证器中拥有的
"rooms.type": {bsonType: ["ensuite", "double", "single"]},
我遇到了一个错误
db.createCollection("home", {
validator : {
$jsonSchema : {
bsonType: "object",
required: ["address.line1", "address.town", "rooms.type",
"rooms.qty", "rooms.price"],
properties: {
"address.line1": {bsonType: "string"},
"address.town": {bsonType: "string"},
"rooms.type": {bsonType: ["ensuite", "double", "single"]},
"rooms.qty": {bsonType: "int", minimum: 0},
"rooms.price": {bsonType: ["double"], minimum: 0},
}}}})
我希望数组room.type允许架构中指定的组中的一个或所有属性。
答案 0 :(得分:1)
您可以指定rooms.type
的类型应为“数组”,数组中至少包含1个项目,并且该数组的每个项目都应为枚举,如下所示:
"rooms.type": {
type: "array",
minItems: 1,
items: {
enum: ["ensuite", "double", "single"]
}
}
MongoDB有documentation on $jsonSchema,但是您可以在MongoDB文档链接的JSON Schema validation spec中找到更多详细信息。
答案 1 :(得分:1)
您还可以通过以下方式指定架构:
db.createCollection('home', {
validator: {
$jsonSchema: {
bsonType: 'object',
required: ['address', 'rooms'],
properties: {
address: {
bsonType: 'object',
additionalProperties: false,
required: ['line1', 'town'],
properties: {
line1: {
bsonType: 'string'
},
town: {
bsonType: 'string'
}
}
},
rooms: {
bsonType: 'object',
additionalProperties: false,
required: ['type', 'qty', 'price'],
properties: {
type: {
bsonType: 'string',
enum: ["ensuite", "double", "single"]
},
qty: {
bsonType: 'int',
minimum: 0
},
price: {
bsonType: 'array',
items: {
bsonType: 'double',
minimum: 0
}
}
}
}
}
}
}
});