Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB中的验证器不工作_Mongodb_Validation - Fatal编程技术网

MongoDB中的验证器不工作

MongoDB中的验证器不工作,mongodb,validation,Mongodb,Validation,我最近开始使用MongoDB(版本3.2.9),并希望尝试它的验证功能,因为我喜欢数据库级别的一致性 我知道我可以而且应该只在业务逻辑中进行验证,就像我已经做的那样。 但是有一个额外的安全层感觉很好 我尝试添加一个集合类别,其类型为'int',类型为'string'的名称,类型为'string'的desc 这些值都应该存在,但没有给出对内容的限制 现在,在下面的步骤中,我得到了以下代码: db.createCollection('category'{ 验证程序:{$or: [ {{u id:{$

我最近开始使用MongoDB(版本3.2.9),并希望尝试它的验证功能,因为我喜欢数据库级别的一致性

我知道我可以而且应该只在业务逻辑中进行验证,就像我已经做的那样。 但是有一个额外的安全层感觉很好

我尝试添加一个集合
类别
,其类型为
'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: ''})