1

У меня возникла проблема выполнения операции агрегации MongoDB на Tornado. Это код,Неудачная агрегация на торнадо/моторе: дал неизвестный объект MotorAggregationCursor

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, используя «выход» асинхронной операции, он бросает исключение как

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) 

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