我有一个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:
....