Tornado/Motor 聚合失败:生成未知对象 MotorAggregationCursor

Failed Aggregation on Tornado/Motor: yielded unknown object MotorAggregationCursor

我在对 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>)

有什么想法吗?我缺少进一步调试的线索...谢谢

实际的 .aggregate() 方法本身并不是 "async"。但是游标迭代是。

所以改为:

cursor = db.activities.aggregate(pipeline)
while (yield cursor.fetch_next):
    doc = cursor.next_object()
    print(doc)

正如文档所说。