我正在使用Express
在Mongo
中开发一个应用程序,我必须query
,document
是否退出collection
。我这样做:
var dept= req.body.dept;
var name= req.body.name;
mongoose.model('User').find({'dept': dept, 'name': name}, function(err, user){
if(err){
res.render('user/test1');
}else{
res.redirect('/');
}
});
我想要做的是检查document
中是否collection
退出,如果condition
退出,我想重定向到另一个页面,否则会呈现当前页面。但是当我传递错误的input
时,即使这样,它也会转到else
部分和redirects
部分。
答案 0 :(得分:1)
嗯,你实际上正在使用mongoose
,所以实际上这个特定版本(缩减)返回的内容与基本驱动程序本身返回的内容之间存在区别。
对于mongoose
,如果找不到任何内容,则返回的结果为array
结果或null
值。如果您正在寻找单数匹配,那么您可能真的需要findOne()
而不是结果数组。
但当然情况是null
结果,如果没有返回任何一个函数,而不是err
结果不是null
,这当然是关于特定的数据库连接错误,而不仅仅是没有找到任何东西。
另一方面,基本驱动程序将返回"Cursor"(或者可选地被视为承诺),可以通过.toArray()
方法迭代或转换为类似mongoose的数组。基本驱动程序的.findOne()
方法同样返回结果或条件不匹配的null
文档。
mongoose.model('User').findOne({'dept': dept, 'name': name}, function(err, user){
if(err){
// if an error was actually returned
} else if ( !user ) {
// Nothing matched, in REST you would 404
} else {
// this is okay
}
});
简而言之,如果您想测试您确实找到了某些内容,请查看user
值以查找不是null
的值,以确定它是否匹配。如果是null
则没有匹配。
所以没有匹配不是"错误"和"错误"实际上是另一回事。