猫鼬模型将多个函数应用于模型对象

Mongoose Model applying multiple functions to a Model Object

我正在使用 Nodejs Expressjs MongoDB 和 Mongoose 为我工作的小型服务应用程序创建 rest 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 模型上一个接一个地调用链中的函数。

非常感谢您的任何建议和想法!

嗯,你总是可以直接调用 .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;
})

或者对于 "chaining" 你可以用 "query" .count()

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

如果您想要 "counts" 所有可能的 "fieldName" 值,请使用 .aggregate():

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

您通常需要开始考虑 "working inside" 异步编程中的回调,而不是 "returning" 您对 "outside" 变量的方法调用的结果。