我正在定义标准查询:
query = Order.collection.find(
{
"company_id" => company._id
},{
projection: {
_id: 1,
order_number: 1
},
sort: { _id: -1 }
}
)
然后,我将skip
和limit
:
query.skip(0).limit(1).to_a
在单独的操作中,我会计算与查询匹配的文档数量:
query.count()
有没有办法合并这两个动作,并在同一个响应中找回两个信息?
答案 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
的最后一步是将结果缩小到您需要的字段。