在NodeJS中使用mongoose返回文档计数

时间:2016-10-02 10:37:36

标签: node.js mongodb mongoose

如何返回查询返回的文档数? 我有一个路由文件,其中包含以下代码:

router.post('/facebookLogin', function(req, res, next){
    var User=require('../models/user');
    var a=User.facebookUserExist(req.body.id, req.body.email);
    console.log(a);
    res.end();
});

以下是用户模型文件的内容:

var User=function(data){
    this.data=data;
}
User.prototype.data={};
User.prototype.facebookUserExist=function(id, email){
    var output;
    db.collection('users').find({
        $or:[
            {
                facebookID:id
            },
            {
                email:email
            }
        ]
    }).count(function(err, numOfDocs){
        output=numOfDocs;
    });
    return output;
}
module.exports=new User;

我在count方法回调中设置了输出变量的值,但该函数仍然返回undefined。

2 个答案:

答案 0 :(得分:1)

我们知道JavaScript是异步的,不会等待结果。所以你可以使用回调或Promise对象,这里是代码回调的例子

router.post('/facebookLogin', function(req, res, next){
    var User=require('../models/user');
    User.facebookUserExist(req.body.id, req.body.email, function(err, count)
        if(err)
            console.log('Error ', err);
        else
            console.log(count);
        res.end();
    });
});

并且您的用户模型将回调作为最后一个参数

var User=function(data){
    this.data=data;
}
User.prototype.data={};
User.prototype.facebookUserExist=function(id, email, callback){
    var output;
    db.collection('users').find({
        $or:[
            {
                facebookID:id
            },
            {
                email:email
            }
        ]
    }).count(function(err, numOfDocs){
        callback(err, numOfDocs);
    });
    //return output;
}
module.exports=new User;

答案 1 :(得分:0)

(.count()是获取MongoDB中的总文档所必需的。这可能有所帮助。

USER.find(req.body.id, req.body.email).count(function(err, count) {
    console.log("Number of docs: ", count); });