MongoDB按复合字段分组计数问题(PyMongo实现)
问题原因
你的文档是扁平结构,字段名是带点的字符串(如"husband.firstName"),而非嵌套的husband/wife对象。原聚合管道中使用"$husband"尝试引用嵌套对象,但文档中根本不存在这个键,导致MongoDB返回null作为分组依据,所有文档被合并为同一组,最终得到总计数。
正确聚合管道
要按夫妻姓名组合分组,需直接引用文档中实际存在的四个带点字段作为分组键,再通过$replaceRoot将分组结果展开为你期望的扁平结构:
pipeline = [ # 按四个姓名字段分组,统计每组数量 { "$group": { "_id": { "husband.firstName": "$husband.firstName", "husband.secondName": "$husband.secondName", "wife.firstName": "$wife.firstName", "wife.secondName": "$wife.secondName" }, "count": {"$sum": 1} } }, # 将_id中的字段合并到顶层,加上count字段 { "$replaceRoot": { "newRoot": { "$mergeObjects": ["$_id", {"count": "$count"}] } } }, # 按计数降序排序 { "$sort": {"count": -1} } ]
结果说明
执行上述管道后,返回结果将完全匹配你的期望格式:每个夫妻姓名组合作为独立文档,包含四个姓名字段和对应的count值,且按计数从高到低排序。
内容的提问来源于stack exchange,提问作者mateusz_mp
相关产品推荐
相关产品推荐

