MongoDB查询中如何分组保留指定字段并实现数据去重
你之前使用的$project仅能做字段筛选映射,没有去重能力,所以会返回重复条目,需求可以直接通过聚合的$group阶段实现,不需要结合distinct函数。
针对你提供的示例数据,符合预期输出的查询语句如下:
db.collection.aggregate([ { $group: { _id: "$code", libelle: { $first: "$libelle" } } } ])
逻辑说明
$group阶段以code字段作为分组依据,同一code的所有文档会被合并为一个分组,分组的_id就是code的值,天然保证结果的_id唯一无重复- 因为同一个
code对应的libelle值完全一致,所以用$first操作符取分组内第一条文档的libelle值即可,你也可以根据需求换成$last,返回结果不会有差异
如果你需要调整返回字段的命名,比如不想用_id作为code的键,可以额外增加一个$project阶段调整输出结构:
db.collection.aggregate([ { $group: { _id: "$code", libelle: { $first: "$libelle" } } }, { $project: { libelle: 1, code: "$_id", _id: 0 } } ])
内容的提问来源于stack exchange,提问作者T25
相关产品推荐
相关产品推荐

