在限制之前返回计数并跳过应用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程,但是您也可以使用其他任何库。