python - Flask-MongoEngine & PyMongo 聚合查询

标签 python mongodb aggregation-framework pymongo flask-mongoengine

我正在尝试使用flask-mongoengine 进行聚合查询,根据我的阅读,这听起来不太可能。

我查看了几个论坛主题、电子邮件链和一些关于 Stack Overflow 的问题,但我还没有找到一个很好的例子来说明如何使用 flask-mongoengine 实现聚合。

this question 中有评论这表示您必须使用“原始 pymongo 和聚合功能”。但是,没有例子说明它是如何工作的。我已经对 Python 进行了修改,并使用 Flask 框架构建了一个基本应用程序,但深入研究成熟的应用程序以及连接/查询 Mongo 对我来说是相当新的。

有人可以提供一个示例(或指向示例的链接),说明我可以如何利用我的 flask-mongoengine 模型,但使用 PyMongo 的聚合框架进行查询? 这是否需要两个到 MongoDB 的连接(一个用于 PyMongo 执行聚合查询,另一个用于通过 MongoEngine 进行常规查询/插入/更新)?

我想要执行的聚合查询示例如下(这个查询让我得到了我在 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 构建的。

关于python - Flask-MongoEngine & PyMongo 聚合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24415045/

相关文章:

javascript - Mongodb 中聚合的更新

node.js - MongoDB 外壳(mongo)不工作

python - pdb 不能中断另一个线程?

python - 查询在 psql 中有效,但在使用 psycopg2 的 Python 中出现语法错误

python - 为什么我无法在 python 中为 'Python Programming for the absolute beginner' 这本书安装 pygame 和 livewires ?

mongodb - 使用聚合框架对每个组进行分组并取前 K

mongodb - 如何获取聚合的前 n 个存储桶,以及将所有其他存储桶组合成 "other"存储桶?

Python - Json 列表到 Pandas Dataframe

linux - MongoDB - 启动 - Ubuntu/Linux

node.js - Mongo 聚合查询提取最近 7 天的数据 (node.js)