聚合查询在 mongo 中有效,在 Pymongo 中无效

新手上路,请多包涵

我遇到了一个问题。我尝试通过“COL”数组之外的 LOC 标识符查询此文档以获取金额和分组的总和。

 {
"_id" : ObjectId("57506d74c469888f0d631be6"),
"LOC" : "User001",
"COL" : [
    {
        "date" : "25/03/2016",
        "number" : "Folio009",
        "amount" : 100
    },
    {
        "date" : "25/04/2016",
        "number" : "Folio010",
        "amount" : 100
    }

] }

此命令在 mongo 中有效,但我无法使用 Pymongo 包使其在 Python 中有效:

Mongo 查询(工作)

 db.perfiles.aggregate({"$unwind": "$COL"},
{ "$group": { _id: "$LOC", "sum" : {"$sum" : "$COL.amount" }}})

Pymongo(不工作)

 from pymongo import MongoClient

client = MongoClient()

db = client['temporal']

docs = db.perfiles

pipeline = [{"$unwind": "$COL"},
     {"$group": {"_id": "$LOC", "count": {"$sum": "$COL.amount"}}}
          ]

list(db.docs.aggregate(pipeline))

在 Pymongo 中查询同一个查询有什么建议吗?谢谢!

原文由 Alfredo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 534
1 个回答

我假设您在 Python 中与 MongoDB 建立了有效连接。

以下代码片段将在 result. 中返回一个 MongoDB 游标

pipeline = [
    {"$unwind": "$COL"},
    {"$group": {"_id": "$LOC", "sum": {"$sum": "$COL.amount"}}}
]

cursor = collection.aggregate(pipeline)

现在您可以将 cursor 转换为列表

result = list(cursor)

如果您打印结果的值,您将获得与 Shell 查询中完全相同的结果。

 [{u'sum': 200.0, u'_id': u'User001'}]

更新

我看到您在 python 代码中将 — aggregate 函数调用为 db.docs.aggregate(pipeline) 。您需要将其称为 docs.aggregate... 而无需 db 。请参见上面的示例。

原文由 Saleem 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题