Ошибка агрегации на торнадо / двигателе: получен неизвестный объект MotorAggregationCursor

У меня проблема с выполнением операции агрегации MongoDB на Tornado. Это код,

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>)

любая идея? Мне не хватает понятия для дальнейшей отладки... спасибо

1 ответ

Решение

Настоящий .aggregate() сам метод не является "асинхронным". Но итерация курсора есть.

Так что вместо:

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

Так же, как говорят документы.

Другие вопросы по тегам