Podczas uruchamiania normalnego zapytania "find" na MongoDB mogę uzyskać całkowitą liczbę wyników (niezależnie od limitu) przez uruchomienie "count" na zwróconym kursie. Tak więc, nawet jeśli ograniczę się do wyniku ustawionego na 10 (na przykład), nadal mogę wiedzieć, że całkowita liczba wyników wyniosła 53 (ponownie, na przykład).MongoDB - Aggregation Framework (Total Count)
Jeśli dobrze rozumiem, struktura agregacji nie zwraca jednak kursora, ale po prostu wyniki. A więc, jeśli użyłem operatora rurociągu $limit
, w jaki sposób mogę poznać całkowitą liczbę wyników niezależnie od wspomnianego limitu?
Zgaduję, że mogłem uruchomić agregację dwa razy (raz, aby policzyć wyniki przez $group
, i raz z $limit
dla rzeczywistych ograniczonych wyników), ale wydaje się to nieefektywne.
Alternatywnym podejściem może być dołączenie łącznej liczby wyników do dokumentów (przez $group
) przed operacją $limit
, ale wydaje się to również nieskuteczne, ponieważ ta liczba zostanie dołączona do każdego dokumentu (zamiast tylko raz zwrócona dla zbiór).
Czy tu czegoś brakuje? Jakieś pomysły? Dzięki!
Na przykład, jeśli jest to zapytanie:
db.article.aggregate(
{ $group : {
_id : "$author",
posts : { $sum : 1 }
}},
{ $sort : { posts: -1 } },
{ $limit : 5 }
);
Skąd mam wiedzieć, ile wyniki są dostępne (przed $limit
)? Wynik nie jest kursorem, więc nie mogę po prostu na nim liczyć.
byłoby pomocne, jeśli dodasz swoje zapytania jako przykład do pytania –
Dodano próbkę kodu. Pytanie jest jednak ogólne (myślę). Dzięki! –