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