如何将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
相关产品推荐
相关产品推荐

