如何通过Mongo聚合框架按age字段筛选唯一文档?
MongoDB聚合实现按age字段筛选唯一文档
你可以通过$group结合$replaceRoot的聚合管道实现需求,核心逻辑是按age分组后保留每组的任意一个文档,再还原文档结构:
聚合管道代码
db.yourCollectionName.aggregate([ { $group: { _id: "$age", uniqueDoc: { $first: "$$ROOT" } } }, { $replaceRoot: { newRoot: "$uniqueDoc" } } ])
阶段说明
- $group:以
age作为分组依据,$first操作符会保留每组中最先被遍历到的完整文档($$ROOT指代当前处理的整个文档),确保每个age只对应一条记录。如果想保留每组最后一条文档,把$first换成$last即可。 - $replaceRoot:将分组后嵌套在
uniqueDoc里的原始文档提升为顶层文档,让输出结构和原集合文档格式一致。
输入示例
[ { _id: ObjectId("123"), name: "john", age: 30 }, { _id: ObjectId("456"), name: "moore", age: 45 }, { _id: ObjectId("789"), name: "carl", age: 30 } ]
输出示例
[ { _id: ObjectId("123"), name: "john", age: 30 }, { _id: ObjectId("456"), name: "moore", age: 45 } ]
内容的提问来源于stack exchange,提问作者Mohammad Farhan
相关产品推荐
相关产品推荐

