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

dev*_*Fun 1 mongoose mongodb node.js express

我有一个在mongoose中定义的模式.当我想要检索我呼叫的所有项目时

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

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

我在find之后尝试了包括count(),但没有运气使它工作.我错过了什么?

Fab*_*tté 6

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

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);
});
Run Code Online (Sandbox Code Playgroud)

请注意,我已经调整了JSON响应格式以适应包含计数的新属性 - 我已将数组的响应更改为{ items: Array, count: Number }.

.exec()没有传递回调的情况下调用会返回一个Mongoose Promise.在上面的示例中,我使用Bluebird(npm install bluebird)来管理异步流,但您也可以使用您选择的任何其他库.