我有一个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
聚合如何不是整数。
答案 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:
....