2015-10-14 31 views
0

我正在开发中Express应用程序中使用Mongo,在我所到query,无论是在collection或不document退出。我这样做:蒙戈与快递:什么是找到返回

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它。

回答

1

那么你实际使用的是mongoose,所以之间其实什么是这个特定版本(abtraction)什么基础驱动程序本身返回返回的区别。

mongoose的情况下,返回的结果是array结果或null值(如果没有找到)。如果您正在寻找单数匹配,那么您可能真的想要findOne()而不是结果数组。

但当然的情况下将是一个null结果与两个函数,如果相对于一个err结果不是null,这当然是对特定的数据库连接错误,而不是简单地说什么也没有找到没有回来。

另一方面,基础驱动程序将返回一个"Cursor"(或可选地视为承诺),它可以通过.toArray()方法迭代或转换为像猫鼬那样的数组。基础驱动程序的.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 
    } 
}); 

总之,如果你想测试,你居然发现的东西,然后看看在不在null,以确定它相匹配的值user值。如果是null则没有任何匹配。

所以不匹配不是一个“错误”,而“错误”实际上是一个不同的东西。

+0

很好解释,谢谢.. findOne神奇地工作! – Saani