我一直在尝试使用MongoDB提供的验证器来验证我的数据,但是我遇到了一个问题。这是我正在插入的简单用户文档。
{
"name" : "foo",
"surname" : "bar",
"books" : [
{
"name" : "ABC",
"no" : 19
},
{
"name" : "DEF",
"no" : 64
},
{
"name" : "GHI",
"no" : 245
}
]
}
现在,这是已应用于用户集合的验证器。但是现在这对于我正在插入文档的books数组起作用。我想检查对象内部的元素,这些元素是books数组的成员。对象的架构不会改变。
db.runCommand({
collMod: "users",
validator: {
$or : [
{ "name" : { $type : "string" }},
{ "surname" : { $type : "string" }},
{ "books.name" : { $type : "string" }},
{ "books.no" : { $type : "number" }}
],
validationLevel: "strict"
});
我知道这个验证器适用于成员对象而不适用于数组,但是我如何验证这样的对象呢?
答案 0 :(得分:3)
问了这个问题已经很久了。
无论如何,只要有人通过这个。
对于 MongoDB 3.6 和更高版本,可以使用验证器来实现。
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name","surname","books"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
surname: {
bsonType: "string",
description: "must be a string and is required"
},
books: {
bsonType: [ "array" ],
items: {
bsonType: "object",
required:["name","no"],
properties:{
name:{
bsonType: "string",
description: "must be a string and is required"
},
no:{
bsonType: "number",
description: "must be a number and is required"
}
}
},
description: "must be a array of objects containing name and no"
}
}
}
}
})
这可以满足您的所有要求。
有关更多信息,请参阅此link
答案 1 :(得分:0)
您可以在3.6版中使用$jsonSchema表达式。
JsonSchema允许定义field as an array并为所有元素指定架构约束,以及为单个数组元素指定特定约束。
This blog post有许多示例,可帮助您弄清楚语法。