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

如何将MongoDB聚合查询转换为PyMongo格式(Mongoengine场景)

解决MongoDB聚合语句转Mongoengine/PyMongo的问题

嘿,我来帮你搞定这个转换问题!其实核心就是把Mongo Shell里的聚合管道转换成Python的字典列表格式,Mongoengine完全支持直接用原生PyMongo的聚合语法来执行,而且用专门的aggregate()方法比__raw__更适合聚合操作。

转换后的完整代码

# 先定义好PyMongo风格的聚合管道
pipeline = [
    {
        "$group": {
            "_id": {
                "cpf": "$person.cpf",
                "data": "$created_at"
            },
            "chamadas": {
                "$push": "$device_data.metaChamadas.duration"
            }
        }
    },
    {
        "$project": {
            "cpf": "$_id.cpf",
            "tamanho": {
                "$size": {
                    "$arrayElemAt": ["$chamadas", 0]
                }
            }
        }
    }
]

# 执行聚合并取前10条结果
results = list(Authentication.objects.aggregate(*pipeline).limit(10))

关键说明

  • 我把你原来的Mongo Shell聚合语句直接转换成了Python字典列表:每个$group、$project阶段对应一个字典,整个管道是一个列表,这就是PyMongo原生支持的格式,Mongoengine的QuerySetaggregate()方法可以直接接收这个管道。
  • 为什么不用__raw__?因为__raw__主要是给普通的find查询传递过滤条件的,聚合操作有专门的aggregate()方法,用起来更规范也更直观。
  • 执行后results里的每个元素都是你需要的结构:包含cpf和tamanho字段,对应你聚合后的统计结果。

内容的提问来源于stack exchange,提问作者Pablo Brenner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:40