2014-12-08 2 views
1

У меня есть документы с полем массива, и мне нужно суммировать размеры этого массива по всем документам. Я использую python -> PyMongo.Лучший способ суммировать размеры массива в mongoDB

В двух словах, применяя вышеупомянутый запрос к этому набору документов должен возвращать 6:

{_id: a, array: [a,b]} 
{_id: b, array: [c, d, e]} 
{_id: c, array: [f]} 

Поиск по Интернету, я придумал следующее решение:

value = collection.aggregate([{"$unwind": "$array"}, {"$group": {"_id": "null", "total": {"$sum": 1}}}]) 

Он работает, и я получаю номер, который я хочу, следующим образом:

count = value['result'][0]['total'] 

Является ли это лучшим запрос, который я могу сделать? Есть ли более эффективный способ?

Я не особо разбираюсь в структуре агрегации mongo, поэтому я подумал, что лучше спросить.

+1

Да, это лучший способ по моему мнению. –

ответ

1

Не нужно разматывать массив, чтобы получить размер.

>>> collection.aggregate([{'$group': {'_id': None, 'total': {'$sum': {'$size': '$array'}}}}]) 
{u'ok': 1.0, u'result': [{u'total': 6, u'_id': None}]} 
+0

Это работает! Это также более эффективно? Наверное, это потому, что он не расслабляется. – boh

Смежные вопросы