При запуске обычного запроса "найти" на MongoDB я могу получить итоговое количество результатов (независимо от ограничения), запустив "count" на возвращаемом курсоре. Таким образом, даже если я ограничу результатом набора до 10 (например), я все еще могу знать, что общее число результатов было 53 (опять же, например).
Если я понимаю это правильно, структура агрегации, однако, не возвращает курсор, а просто результаты. Итак, если я использовал оператор конвейера $limit
, как я могу узнать общее количество результатов независимо от указанного предела?
Думаю, я мог бы запустить агрегацию дважды (один раз, чтобы подсчитать результаты через $group
и один раз с $limit
для фактических ограниченных результатов), но это кажется неэффективным.
Альтернативный подход может заключаться в том, чтобы связать общее количество результатов с документами (через $group
) до операции $limit
, но это также кажется неэффективным, поскольку этот номер будет прикреплен к каждому документу (а не просто возвращается один раз для набора).
Я что-то упустил? Есть идеи? Спасибо!
Например, если это запрос:
db.article.aggregate(
{ $group : {
_id : "$author",
posts : { $sum : 1 }
}},
{ $sort : { posts: -1 } },
{ $limit : 5 }
);
Как узнать, сколько результатов доступно (до $limit
)? Результат не является курсором, поэтому я не могу просто рассчитывать на него.