mongoengine +django как посчитать количество элементов одного контента

Я хочу подсчитать все числа разных значений в поле. В mongoengine нет "annotate()", тогда как мне посчитать число и упорядочить их по номерам?

Единственный способ, который я решил решить - это использовать "Different()", чтобы найти разные значения, а затем использовать "count()", чтобы подсчитать каждое из значений. Это глупый способ реализовать желаемый результат.

У вас есть другие способы?

2 ответа

Решение

В MongoEngine есть несколько помощников, которые должны соответствовать вашим потребностям. Метод Queryset item_frequencies[1] будет соответствовать вашим потребностям. Никакой специальной поддержки для новой структуры агрегации нет, но поддержка может быть добавлена ​​в будущем.

Пример использования:

BlogPost.objects.item_frequencies('tags')

[1] http://docs.mongoengine.org/en/latest/apireference.html?highlight=item_frequencies

Сам MongoEngine не имеет специальных средств для достижения этой цели, но платформа агрегации MongoDB 2.2 позволяет подсчитывать документы, сгруппированные по полю. Я предлагаю использовать метод агрегата PyMongo напрямую с конвейером агрегации для выполнения этого запроса:

http://api.mongodb.org/python/current/examples/aggregation.html

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