考虑一个非常简单的MongoDB架构,如个人详细信息集:
schema: {
name:'string',
address: [
{
zipcode: 'number'
}
]
};
我打算构建的集合必须是一个包含2个字段的集合:一个字符串类型的名称字段和一个地址字段,它是一个嵌套的对象数组,其中邮政编码密钥是必需的。我不打扰如果还有其他按键,例如“门禁号码”等。 '城市'我在地址字段中出现过。我已经用3种方式使用查询运算符编写了mongodb验证器模式: 第一种方式:
db.createCollection("person_details_1",
{
validator:
{
$and:[
{address :{$type:'array',$type:'object'}},
{ address: { $elemMatch: { zipcode : {$type: 'number' ,$exists :true } } } },
{name :{$type :'string'}}
]
}});
第二种方式:
db.createCollection("person_details_2",
{
validator:
{
$and:[
{address :{$type:'array',$type:'object'}},
{'address.zipcode' : {$type : 'number'}},
{name :{$type :'string'}}
]
}});
第三种方式:
db.createCollection("person_details_3",
{
validator:
{
$and: [
{address :{$type:'array',$type:'object'}},
{ address: { $elemMatch: { zipcode : {$type :'number'} } , $exists :true } },
{name :{$type :'string'}}
]
}});
所有集合都成功验证了1)名称缺席的情况2)地址字段不存在/它是错误的数据类型3)插入记录名称字段和地址数组,其中一个对象具有zipcode字段。但是下面的情况失败了:如果我尝试插入一个有多个对象的地址验证器,只检查对象中是否有任何一个具有zipcode密钥并插入其中,其意图是验证器必须遍历数组中的所有对象,并且必须检查是否zipcode存在于每个存在的对象中。更清楚的是,我接受以下代码,我打算在下面的代码中产生错误:
db.person_details_1.insert(
{
name: 'arav',
address:
[{
zipcode: 23213
},{
name: 'ewef'
}]
});
此记录已插入到集合中,但实际上我想要为其抛出错误消息。同样适用于person_details_2和person_details_3。
P.S:我希望解决方案是查询验证操作符,而不是$ jsonSchema。