我遇到在Tornado上执行MongoDB聚合操作的问题。这是代码,
pipeline = [
{'$match': {
'$or': [
{'owner.id': '56dfdaa4082024b9384c0055'},
{'members.top.member.id':'56dfdaa4082024b9384c0055'}
]
}},
{'$sort': {'date_s': -1}},
{'$skip': 0},
{'$limit': 20},
{'$project':{
'created_at': 1,
'name': 1,
'id': '$_id',
'group.group_id': 1,
'_id': 0,
'permission': 1,
'owner': 1,
'type': 1,
'members.total': 1,
'desc': 1,
'declared': 1
}}
]
cursor = yield db.activities.aggregate(pipeline)
相同的命令在MongoDB管理工具上运行得非常好(我使用的是MongoChef)。但是在Python Tornado上,使用“yield”异步操作,它会抛出异常
yielded unknown object MotorAggregationCursor(<motor.core._LatentCursor object at 0x00000000042DEA58>)
任何想法?我没有进一步调试的线索......谢谢
答案 0 :(得分:1)
实际的.aggregate()
方法本身并不是“异步”。但是光标迭代是。
所以相反:
cursor = db.activities.aggregate(pipeline)
while (yield cursor.fetch_next):
doc = cursor.next_object()
print(doc)
就像文档说的那样。