使用`skip`和`limit`查询:返回分页文档和总计数

时间:2018-01-16 20:59:51

标签: mongodb mongodb-query

我正在定义标准查询:

query = Order.collection.find(
  {
    "company_id" => company._id
  },{
    projection: {
      _id: 1,
      order_number: 1
    },
    sort: { _id: -1 }
  }
)

然后,我将skiplimit

组合在一起,对我的查询进行了分页
query.skip(0).limit(1).to_a

在单独的操作中,我会计算与查询匹配的文档数量:

query.count()

有没有办法合并这两个动作,并在同一个响应中找回两个信息?

1 个答案:

答案 0 :(得分:0)

聚合框架非常灵活,可以在一个查询中为您提供两种信息:

db.Order.aggregate([
  { $match: { company_id: company._id } },
  { $sort: { "_id": -1 } },
  {
    $group: {
      _id: null,
      count: { $sum: 1 },
      firstItem: { $first: "$$ROOT" }
    }
  },
  {
    $project: {
      count: 1,
      _id: "$firstItem._id",
      order_number: "$firstItem.order_number"
    }
  }
])

对已过滤的文档集执行排序。然后我们使用$first进行分页,$sum来计算项目。 _id等于null意味着我们正在对整个集合进行分组。使用$project的最后一步是将结果缩小到您需要的字段。