我正在使用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模型中一个接一个地调用链中的函数。
我提前感谢任何建议和想法!
答案 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
});
你通常需要开始思考"在内部工作"异步编程中的回调而不是"返回"您的方法调用结果"外部"变量