PyMongo TypeError

时间:2016-12-12 09:47:25

标签: python mongodb pymongo

我有一个python脚本,如果特定聚合的总和大于一个数字(在本例中为30),我使用pymongo聚合集合并对它们执行某些操作。

  agg = collection.aggregate([{"$match":{"valid":1}}, {"$group": {"_id": {"createdby" : "$createdby" ,"addedtime" : "$addedtime", "empname" : "$empname"}, "count":{"$sum":1}}}])

  cnt = 0
  for eachAgg in agg:
    print "eachAgg = ",eachAgg
    if eachAgg['count'] >= 30:

当我运行此脚本时,我正在

  eachAgg = ok
  Traceback (most recent call last): 
  File "test.py", line 33, in <module>
  if eachAgg['count'] >= 30: 
  TypeError: string indices must be integers

我不明白$sum聚合如何不是整数。

1 个答案:

答案 0 :(得分:4)

agg:返回一个更详细的dict,其中包含聚合结果,即:

    { 
      u'ok': 1.0, 
      u'waitedMS': 0L, 
      u'result': [<your actual aggregation result>]
    }

这就是你获得TypeError: string indices must be integers的原因,因为你在dict(for eachAgg in agg)中遍历键,其中键是字符串,字符串索引必须是整数。

真实的数据结果在agg['result'],尝试:

for eachAgg in agg['result']:
    if eachAgg['count'] >= 30:
    ....