MongoDB聚合操作:如何选取每个分桶中的首个文档?
MongoDB聚合:在$bucket中获取每个分桶的首个文档
你已经通过$match过滤文档,再按createdOn倒序排序,现在要在$bucket阶段直接输出每个分桶的第一个文档,完全可以做到,具体写法如下:
完整聚合阶段代码
[ { $match: { ...someFilters } }, { $sort: { createdOn: -1 } }, { $bucket: { groupBy: "$somePropertyInDoc", output: { firstDoc: { $first: "$$ROOT" } } } } ]
关键说明
- 因为你已经在
$bucket前执行了$sort(按createdOn降序),所以进入分桶阶段的文档是按时间从新到旧排列的,每个分桶内的文档顺序也遵循这个规则。 $$ROOT是MongoDB聚合中的系统变量,代表当前处理的整个文档对象。$first操作符会直接提取分桶内的第一个文档,也就是排序后的最新文档。
如果不需要完整文档,只想提取特定字段,也可以自定义投影内容,比如:
output: { firstDoc: { $first: { _id: "$_id", title: "$title", createdOn: "$createdOn" } } }
内容的提问来源于stack exchange,提问作者Akshay Kumar
相关产品推荐
相关产品推荐

