sql >> Databáze >  >> NoSQL >> MongoDB

Mongo s javou - najít dotaz s velikostí dávky

DBCursor umožňuje opakovat sadu dokumentů, které jsou považovány za relevantní pro dotaz předán do find() metoda. Tyto dokumenty líně načítá ze základní databáze po kouscích batchSize .

Takže s výchozí velikostí dávky (101, IIRC) vrátí prvních 101 dokumentů vašemu klientovi a poté, jak váš klientský kód iteruje za 101. dokument, bude (za scénou) získávat dalších 101 dokumentů a tak dále, dokud nebude cokoliv z následujícího dojde jako první:

  • Vrátí se všechny dokumenty, které jsou relevantní pro váš dotaz, tj. kurzor je vyčerpán
  • Váš klient přestane iterovat

Totéž platí, když nastavíte explicitní velikost dávky takže ve vašem případě, když nastavíte batchSize=500 , find() volání vrací DBCursor který obsahuje (nejvýše) 500 dokumentů a pokud by vašemu dotazu odpovídalo více než 500 dokumentů, pak při iteraci za 500. dokument ovladač MongoDB Java (za scénou) načte další dávku.

Uvedl jste ...

... pokud získáte pouze 500 dokumentů, pak jste buď přestali iterovat po 500, nebo bylo pro váš dotaz považováno za relevantních pouze 500 dokumentů .

Pomocí count() můžete zjistit, kolik dokumentů je relevantních pro váš dotaz metoda. Například:

int count = collection.find(query).count();

Můžete také získat všechny dokumenty relevantní pro váš dotaz najednou bez použití DBCursor takhle ...

List<DBObject> obj = collection.find(query).toArray();

... i když by to samozřejmě mohlo mít důsledky pro hromadu vaší aplikace, protože by to vedlo k tomu, že každý dokument, který splňuje vaše kritéria, bude uložen na hromadě ve vašem klientovi (spíše než paměťově šetrnější přístup, kdy je čtete v dávkách pomocí DBCursor ).



  1. Spring mongodb kompas postrádá vytvořená data/kolekce

  2. Obývat se v Mongoose

  3. Jak načíst odlišné klíče uvnitř objektu v MongoDB

  4. MongoDB:aktualizujte každý dokument na jednom poli