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

2024-01-03

我遇到了一个问题。我尝试查询此文档以获取“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" }}})

皮蒙戈(不工作)

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 中查询相同的查询吗?谢谢!


我假设您在 Python 中拥有与 MongoDB 的有效连接。
以下代码片段将返回一个 MongoDB 游标result.

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

cursor = collection.aggregate(pipeline)

现在您可以转换cursor to list

result = list(cursor)

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

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

Update:

我看到你正在打电话aggregatepython 代码中的函数为db.docs.aggregate(pipeline)。 你需要将其称为docs.aggregate...没有db。请参阅上面的示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聚合查询在 mongo 中有效,但在 Pymongo 中无效 的相关文章

随机推荐