Структура агрегации MongoDB сортируется по длине массива

Учитывая следующий набор данных:

{ "_id" : ObjectId("510458b188ce1d16e616129b"), "codes" : [ "oxtbyr", "xstute" ], "name" : "Ciao Mambo", "permalink" : "ciaomambo", "visits" : 1 }
{ "_id" : ObjectId("510458b188ce1d16e6161296"), "codes" : [ "zpngwh", "odszfy", "vbvlgr" ], "name" : "Anthony's at Spokane Falls", "permalink" : "anthonysatspokanefalls", "visits" : 0 }

Как я могу преобразовать эту сортировку python/pymongo во что-то, что будет работать с платформой агрегации MongoDB? Я сортирую результаты по количеству кодов в массиве codes.

z = [(x['name'], len(x['codes'])) for x in restaurants]
sorted_by_second = sorted(z, key=lambda tup: tup[1], reverse=True)
for x in sorted_by_second:
    print x[0], x[1]

Это работает в python, я просто хочу знать, как достичь той же цели в конце запроса MongoDB.


person Dan Gayle    schedule 29.01.2013    source источник


Ответы (1)


person    schedule
comment
Это, по крайней мере, дает мне начало. Я хотел бы показать полные результаты, но, по крайней мере, я в правильном направлении. Любые подсказки о производительности этого по сравнению с приложением? - person Dan Gayle; 29.01.2013
comment
это может стать ближе: db.z.aggregate({$unwind:'$codes'}, { $group : {_id:{name:'$name', permalink:'$permalink'}, count:{$sum: 1}}}, {$sort:{count:-1}}) Производительность? Вам придется протестировать, но, скорее всего, ваш сервер MongoDB привязан к вводу-выводу, а не к ЦП, поэтому тратить часть ЦП на агрегацию там, вместо того, чтобы заполнять провод документами для обработки в Python, вероятно, является победой. - person A. Jesse Jiryu Davis; 29.01.2013