MongoDB聚合中对$filter结果实现去重计数的方法咨询
直接对$filter结果去重计数的实现方案
完全不用重构现有查询,直接在原有的$project阶段里嵌套MongoDB数组操作符就能实现去重计数。核心逻辑分四步:
- 保留你原有的
$filter逻辑得到目标数组; - 提取数组中用来判定重复的标识(可以是单个字段,也可以是整个对象);
- 用
$setUnion对提取出的内容去重; - 最后用
$size获取去重后的元素数量。
具体代码示例
把你原有的totalCount字段替换成下面的结构即可:
"uniqueCount": { "$size": { "$setUnion": [ { "$map": { "input": { "$filter": { ... } // 这里保留你原来的filter条件 }, "as": "item", "in": "$$item.itemId" // 替换成你实际用来去重的字段,要对整个对象去重就写"$$item" } } ] } }
补充说明
- 若要对整个Item对象去重,直接将
$map的in值改为$$item,$setUnion会自动对比对象完整内容实现去重; - 若要基于单个字段去重,就像示例中那样提取对应字段值,
$setUnion会对该字段的取值做去重处理; - 整个逻辑完全嵌套在
$project阶段内,不需要改动$facet的整体结构,也无需新增$unwind或$group步骤。
内容的提问来源于stack exchange,提问作者mwilson
相关产品推荐
相关产品推荐

