mongodb查询验证器不检查对象数组中每个对象的约束

时间:2018-05-25 06:27:15

标签: mongodb validation mongodb-query mongo-shell

考虑一个非常简单的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。

0 个答案:

没有答案