如何在MongoDB聚合查询中移除数组内的重复值
解决方案
你有两种常见方式实现socialMedia数组去重:
方案1:直接在group阶段使用$addToSet替换$push
$addToSet是MongoDB专为分组时生成无重复元素数组设计的聚合算子,会自动忽略重复的添加值,修改后的聚合语句如下:
db.collection.aggregate([ { "$group": { "_id": { "firstName": "$firstName", "lastName": "$lastName", "phoneNumber": "$phoneNumber", "DOB": "$DOB" }, "count": { "$sum": 1 }, "socialMedia": { "$addToSet": "$socialMedia" // 替换原来的$push即可 } } }, { "$project": { "_id.firstName": 1, "_id.lastName": 1, "Count": "$count", // 补充别名映射,保证输出字段名符合你的原有格式 "socialMedia": 1 } } ])
方案2:在project阶段通过$setUnion去重
如果你需要保留原始带重复的数组同时额外输出去重结果,也可以保留$push逻辑,在project阶段对数组做去重处理:
db.collection.aggregate([ { "$group": { "_id": { "firstName": "$firstName", "lastName": "$lastName", "phoneNumber": "$phoneNumber", "DOB": "$DOB" }, "count": { "$sum": 1 }, "socialMedia": { "$push": "$socialMedia" } } }, { "$project": { "_id.firstName": 1, "_id.lastName": 1, "Count": "$count", "socialMedia": { $setUnion: [ "$socialMedia", [] ] } // 对数组自身求并集实现去重 } } ])
优先推荐方案1,性能更高,不需要额外的后续处理步骤,即可直接输出符合要求的无重复socialMedia数组。
内容的提问来源于stack exchange,提问作者Cristian
相关产品推荐
相关产品推荐

