You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:52:38