在限制之前返回计数并跳过应用mongoose

我有一个在mongoose中定义的模式。 当我想检索所有我打电话的项目

Item .find() .limit(limit) .skip(skip) .exec(function (err, Items) { if(err) { return handleError(res, err); } return res.json(200, Items); }); 

在将来我想执行一些过滤,然后计算结果的数量。 如何在限制之前在回复中包含结果数量并跳过应用?

查找后我试着包括count(),但没有运气使它工作。 我错过了什么?

我相信有两个查询是必要的,你可以并行执行它们:

 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()而不传递callback将返回一个Mongoose Promise 。 在上面的示例中,我使用Bluebird ( npm install bluebird )来pipe理asynchronousstream程,但是您也可以使用其他任何库。