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