MongoDB中的验证器不工作
我最近开始使用MongoDB(版本3.2.9),并希望尝试它的验证功能,因为我喜欢数据库级别的一致性 我知道我可以而且应该只在业务逻辑中进行验证,就像我已经做的那样。 但是有一个额外的安全层感觉很好 我尝试添加一个集合MongoDB中的验证器不工作,mongodb,validation,Mongodb,Validation,我最近开始使用MongoDB(版本3.2.9),并希望尝试它的验证功能,因为我喜欢数据库级别的一致性 我知道我可以而且应该只在业务逻辑中进行验证,就像我已经做的那样。 但是有一个额外的安全层感觉很好 我尝试添加一个集合类别,其类型为'int',类型为'string'的名称,类型为'string'的desc 这些值都应该存在,但没有给出对内容的限制 现在,在下面的步骤中,我得到了以下代码: db.createCollection('category'{ 验证程序:{$or: [ {{u id:{$
类别,其类型为'int'
,类型为'string'
的名称,类型为'string'
的desc
这些值都应该存在,但没有给出对内容的限制
现在,在下面的步骤中,我得到了以下代码:
db.createCollection('category'{
验证程序:{$or:
[
{{u id:{$and:[{$exists:true},
{$type:'int'}]},
{name:{$and:[{$exists:true},
{$type:'string'}]},
{desc:{$and:[{$exists:true},
{$type:'string'}]}
]
}
})
然而,对于这种简单的结构,MongoDB抱怨:
{“ok”:0,“errmsg”:“未知运算符:$and”,“code”:2}
现在,我已经找到了,但只是尝试将多个约束直接放在$或数组中:
db.createCollection('category'{
验证程序:{$or:
[
{{u id:{$exists:true}},
{{u id:{$type:'int'}},
{name:{$exists:true}},
{name:{$type:'string'}},
{desc:{$exists:true}},
{desc:{$type:'string'}}
]
}
})
但是现在,虽然它确实像应该的那样创建了集合,但我现在可以执行以下任何insert
命令:
db.category.insert({})
插入({u id:17,名称:'',说明:'valid'})
db.category.insert({u id:42,name:42,desc:'})
db.category.insert({u id:43,name:'',desc:42})
插入({u id:'',名称:42,说明:42})
db.category.find()
现在返回
{u id:ObjectId(“57e19650b10ab85eca323684”)}
{“_id”:17,“name”:“,“desc”:“valid”}
{“_id”:42,“name”:42,“desc”:“”}
{“_id”:43,“name”:“,“desc”:42}
{“_id”:“,“name”:42,“desc”:42}
作为最后的手段,我尝试将$或
操作符更改为$和
,因为它需要所有规则都有效,而不仅仅是至少一条
db.createCollection('category'{
验证程序:{$and:
[
{{u id:{$exists:true}},
{{u id:{$type:'int'}},
{name:{$exists:true}},
{name:{$type:'string'}},
{desc:{$exists:true}},
{desc:{$type:'string'}}
]
}
})
这种方法对我来说似乎是最合理的,但它根本不起作用。无论我试着使用上面提到的插入项
中的哪一项,请注意,5项中有一项有效,没有一项有效,所有这些都会给我相同的错误:
WriteResult({
“未插入”:0,
“writeError”:{
“代码”:121,
“errmsg”:“文档验证失败”
}
})
如上所述,调用db.version()
将返回3.2.9
,我在Windows计算机上运行默认的MongoDB 64位发行版,其中只有--dbpath
参数设置为以前的空目录。请使用函数numberrint()
提供32位整数值。否则,它将被解释为Double
以下插入操作应成功地将文档插入到集合中
成功场景:-
db.category.insert({_id: NumberInt(17), name: "aaaa", desc: "valid"})
db.category.insert({_id: NumberInt(42), name: 42, desc: ''})
故障场景:-
db.category.insert({_id: NumberInt(17), name: "aaaa", desc: "valid"})
db.category.insert({_id: NumberInt(42), name: 42, desc: ''})