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

  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聚合如何不是整数。

最佳答案

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:
    ....

10-07 12:34