Flask-MongoEngine & PyMongo Aggregation Query
我正在尝试使用flask-mongoengine进行聚合查询,从我阅读的内容来看,这听起来似乎是不可能的。
我查看了几个论坛线程,电子邮件链和有关Stack Overflow的几个问题,但是我还没有找到一个很好的例子来说明如何使用flask-mongoengine实现聚合。
这个问题有一条评论,说您必须使用"原始pymongo和聚合功能"。但是,没有任何示例说明其工作方式。我已经修改过P??ython,并使用Flask框架构建了一个基本应用程序,但是深入研究成熟的应用程序以及对Mongo的连接/查询对我来说是很新的。
有人可以提供一个示例(或链接到示例),说明我如何利用我的flask-mongoengine模型,但可以使用带有PyMongo的聚合框架进行查询吗?
这是否需要两个到MongoDB的连接(一个用于PyMongo来执行聚合查询,另一个用于通过MongoEngine进行常规查询/插入/更新)?
我想执行的聚合查询示例如下(此查询为我提供了我想要的Mongo shell信息):
1 2 3 4 5 6 7 | db.entry.aggregate([ { '$group' : { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 'count' : { '$sum' : 1 } } } ]) |
此查询的输出示例:
1 2 3 4 | {"_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定义的类实际上具有
我只是在这里使用名称
1 2 3 4 5 6 7 | Model._get_collection().aggregate([ { '$group' : { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 'count' : { '$sum' : 1 } } } ]) |
因此,您始终可以在不建立单独连接的情况下访问pymongo对象。 Mongoengine本身是建立在pymongo之上的。
链接到API参考。
由于周围没有任何示例,因此这里是如何使用Mongoengine> 0.9的聚合框架执行聚合查询的方法
1 2 3 4 5 6 7 8 | pipeline = [ { '$group' : { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 'count' : { '$sum' : 1 } } }] Model.objects().aggregate(*pipeline) |