将mongo聚合传递给python

时间:2015-02-01 21:02:00

标签: python mongodb pymongo

我在python中有以下代码试图传递mongo查询。连接的细节如下。当我执行此操作时,我得到“语法无效”并且语法错误指向代码"total:{"...之后我觉得这与Python中的字典对象有关但我有点困惑如何继续。

import pymongo

from pymongo import MongoClient

client = MongoClient()

db = client.trackers

a = list((db.monthlytracker.aggregate([{$match:   
          {'Country':'Japan','Vendor':'Others'}}, 
          {$group:{_id:"$Fiscal Quarter",total:{$sum:"$Units"}}}])))

1 个答案:

答案 0 :(得分:1)

您使用的语法错误。 pymongo驱动程序只接受字符串:

a = list((db.monthlytracker.aggregate([{'$match':   
          {'Country':'Japan','Vendor':'Others'}}, 
          {'$group':{'_id':"$Fiscal Quarter",'total':{'$sum':"$Units"}}}])))

只需引用所有内容,您就可以了。

问题是python看起来评估$group $match等等,并且它不知道这些变量。所以你可能会遇到如下错误:

$match
  File "<ipython-input-1-972ca9ab5d06>", line 1
    $match
    ^
SyntaxError: invalid syntax

或:

NameError: name 'total' is not defined

还有一个最后的事情,小心将游标转换为列表对象,就像使用:

list(db.monthly.tracker.aggregate(...))

这很容易消耗你的记忆力。相反,您应该迭代光标中的项目,如下所示:

for item in db.monthly.tracker.aggregate(...):
    do_your_magic_here(item)