我有一个用mongoose定义的模式。当我想要检索我打电话的所有项目时
Item
.find()
.limit(limit)
.skip(skip)
.exec(function (err, Items) {
if(err) { return handleError(res, err); }
return res.json(200, Items);
});
将来我想进行一些过滤,然后计算结果数量。如何在限制和跳过应用之前在响应中包含结果数?
我在find之后尝试了包括count(),但没有运气使其正常工作。我错过了什么?
答案 0 :(得分:5)
我认为有必要进行两次查询,你可以并行执行:
var Promise = require('bluebird');
Promise.all([
Item.find().limit(limit).skip(skip).exec(),
Item.count().exec()
]).spread(function(items, count) {
res.json(200, { items: items, count: count });
}, function(err) {
handleError(res, err);
});
请注意,我已经调整了JSON响应格式以适应包含计数的新属性 - 我已将数组的响应更改为{ items: Array, count: Number }
。
在不传递回叫的情况下调用.exec()
会返回Mongoose Promise。在上面的示例中,我使用Bluebird(npm install bluebird
)来管理异步流,但您也可以使用您选择的任何其他库。