mongodb - python Flask MongoEngine & PyMongo聚合查询

  显示原文与译文双语对照的内容

我正在试图使用瓶子mongoengine进行聚合查询,并且从我所读到的内容看起来并不像是可以能的。

我查看了几个论坛线程,E-mail 链和一些关于堆栈溢出的问题,但是我没有找到如何实现聚合。

关于这个问题,有一个注释,说你必须使用"原始pymongo和聚合功能。",但没有例子说明如何工作。 我已经对 python 进行了修改,并且使用了 Flask 框架的基本应用程序。

有人可以提供一个示例( 或者链接到一个示例) 如何使用flask模型,但使用带有的聚合框架查询? 这是否需要两个到 MongoDB ( 一个用于PyMongo执行聚合查询,另一个用于通过MongoEngine执行常规 query/insert/updating )的连接?

我想执行的聚合查询的示例如下( 这个查询让我在 Mongo shell 中得到我想要的信息):


db.entry.aggregate([


 { '$group' : 


 { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 


 'count' : { '$sum' : 1 }


 }


 }


])



这里查询的输出示例:


{"_id" : {"carrier" :"Carrier 1","category" :"XYZ" },"count" : 2 }


{"_id" : {"carrier" :"Carrier 1","category" :"ABC" },"count" : 4 }


{"_id" : {"carrier" :"Carrier 2","category" :"XYZ" },"count" : 31 }


{"_id" : {"carrier" :"Carrier 2","category" :"ABC" },"count" : 6 }



时间: 原作者:

使用Mongoengine定义的类实际上具有一个 _get_collection() 方法,该方法获取在pymongo驱动程序中实现的"原始"集合。

我只是在这里使用名称 Model 作为为这里示例中的连接定义的实际类的占位符:


Model._get_collection().aggregate([


 { '$group' : 


 { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 


 'count' : { '$sum' : 1 }


 }


 }


])



因此,你可以始终访问pymongo对象而不建立单独的连接。 Mongoengine本身是基于pymongo构建的。

原作者:

aggregate 自 Mongoengine 0.9后可用。 链接到 API参考文件。

这里没有任何例子,这里是如何使用 Mongoengine> 0.9的聚合框架执行聚合查询


pipeline = [


 { '$group' : 


 { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 


 'count' : { '$sum' : 1 }


 }


 }]



Model.objects().aggregate(*pipeline)



原作者:
...