Mongo with Express:找到了什么回报

时间:2015-10-14 06:05:01

标签: mongodb express mongoose mongodb-query

我正在使用ExpressMongo中开发一个应用程序,我必须querydocument是否退出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部分。

1 个答案:

答案 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则没有匹配。

所以没有匹配不是"错误"和"错误"实际上是另一回事。