MongoDB ma możliwe do śledzenia kursory , które umożliwiają ponowne użycie kursora po zwróceniu wszystkich danych. Wyglądałoby to mniej więcej tak:
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n)
more = docs.hasNext()
Zauważ, że zostało pobranych tylko 10 dokumentów, ale kursor można sprawdzić, aby określić, czy dostępnych jest więcej obiektów. Jedynym problemem jest to, że kursory z możliwością ogonowania mogą być używane tylko w kolekcjach z ograniczeniami.
Powyższe może być również używane ze zwykłym kursorem, ale musisz zapytać o n + 1
dokumenty. Jest to w zasadzie to samo rozwiązanie, którego używasz teraz. Musisz użyć size()
jednak, ponieważ uwzględnia to modyfikatory pomijania i ograniczania.
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n + 1)
more = db.size() > n
Nie znam PyMongo, więc nie wiem na pewno, ale istnieje możliwość, że to rozwiązanie wysyła n + 1
pełne dokumenty do Twojej aplikacji, zamiast wymaganego n
, co skutkuje niewielkim obciążeniem przepustowością. W takim przypadku możesz utworzyć funkcję po stronie serwera, która robi to samo, ale zwraca tylko obiekt zawierający n
dokumenty w tablicy i flagę wskazującą, czy n + 1
dokument jest dostępny.