Mongoose Model将多个函数应用于模型对象

时间:2015-07-01 10:45:36

标签: node.js mongodb function mongoose chaining

我正在使用Nodejs Expressjs MongoDB和Mongoose为我正在处理的小型服务应用创建其他API。

我使用像.find()这样的单一直接函数做了所有路由 .findOneAndUpdate()等 像这样:

    router.get('/testTable', function(req, res, next) {
    TestModel.find(function (err, testTableEntries) {
        if (err) return next(err);
        res.send(testTableEntries);
    });
});

非常简单。但是,如果我想要包含更多函数,那么只需单个mongo函数.find()

如果我想:

 .find().pretty()

或者如果想要聚合,请进行一些计算:

.find().count()
.find({"fieldName": "How many have this value?"}).count()
.find({"fieldName": "How many have this value?"}).count().pretty()

我尝试过类似的事情:

    router.get('/testTable', function(req, res, next) {
    TestModel.find(function (err, testTableEntries) {
        if (err) return next(err);
        res.send(testTableEntries);
    }).count();
});

或许你可以建议带有承诺的无回复解决方案(比如Bluebird),我的第一个想法是:

router.get('/testTable', function(req, res, next) {
    TestModel.find(function (err, next) {
        if (err) return next(err);
    }).then(function (req, res, next) {
        res.send(testTableEntries);
    }).catch(function (err, next) {
        if (err) return next(err);
    });
});    

也许有一些可以解决它的Mongoose内置函数,我会很感激,但也知道如何在Mongoose模型中一个接一个地调用链中的函数。

我提前感谢任何建议和想法!

1 个答案:

答案 0 :(得分:0)

您可以随时直接致电.count()

Test.count({"fieldName": "How many have this value?"},function(err,count) { 
   // count is the counted results
});

当然,mongoose中`.find()返回的对象是一个数组,所以:

Test.find({"fieldName": "How many have this value?"},function(err,results) {
    var count = results.length;
})

或者"链接"你可以用"查询" .count()

Test.find({"fieldName": "How many have this value?"})
   .count().exec(function(err,results) {
})

如果你想要"计数"尽可能" fieldName"然后使用.aggregate()

Test.aggregate([
    { "$group": {
        "_id": "fieldName",
        "count": { "$sum": 1 }
    }},
],function(err,results) {
   // each result has a count
});

你通常需要开始思考"在内部工作"异步编程中的回调而不是"返回"您的方法调用结果"外部"变量