DBCursor
pozwala na iterację po zbiorze dokumentów, które są uważane za istotne dla zapytania
przekazać do find()
metoda. Leniwie pobiera te dokumenty z bazowej bazy danych w kawałkach batchSize .
Tak więc przy domyślnym rozmiarze partii (101, IIRC) zwróci pierwsze 101 dokumentów klientowi, a następnie, gdy kod klienta będzie iterować poza 101. dokumentem, (za kulisami) pobierze następne 101 dokumentów i tak dalej, aż do z następujących wystąpi najpierw:
- Zwracane są wszystkie dokumenty, które są istotne dla Twojego zapytania, tj. kursor jest wyczerpany
- Twój klient przestaje iterować
To samo dotyczy sytuacji, gdy ustawisz jawny batchSize więc w twoim przypadku, gdy ustawisz batchSize=500
, znajdź()
wywołanie zwraca DBCursor
który zawiera (maksymalnie) 500 dokumentów, a jeśli było więcej niż 500 dokumentów pasujących do zapytania, to po przejściu poza 500. dokument sterownik Java MongoDB (za kulisami) pobrałby następną partię.
Stwierdziłeś ...
... jeśli otrzymasz tylko 500 dokumentów, to albo przestałeś iterować po 500, albo tylko 500 dokumentów zostało uznanych za istotne dla Twojego zapytania
.
Możesz zobaczyć, ile dokumentów jest odpowiednich dla Twojego zapytania, używając count()
metoda. Na przykład:
int count = collection.find(query).count();
Możesz też pobrać wszystkie dokumenty związane z zapytaniem za jednym razem bez użycia DBCursor
w ten sposób ...
List<DBObject> obj = collection.find(query).toArray();
... chociaż oczywiście może to mieć wpływ na stertę Twojej aplikacji, ponieważ spowoduje to, że każdy dokument spełniający Twoje kryteria będzie przechowywany na stercie w Twoim kliencie (zamiast bardziej przyjaznego dla pamięci podejścia polegającego na odczytywaniu ich w partiach za pomocą