sql >> Database >  >> NoSQL >> MongoDB

Efficiënte paginering van MongoDB-aggregatie?

In MongoDB-cursormethoden (d.w.z. bij gebruik van find() ) zoals limit , sort , skip kan in elke volgorde worden toegepast => volgorde maakt niet uit. Een find() geeft een cursor terug waarop wijzigingen zijn toegepast. Sorteren gebeurt altijd vóór de limiet, ook wordt overslaan vóór de limiet gedaan. Dus met andere woorden, de volgorde is:sorteer -> overslaan -> limiet .

Aggregatieframework retourneert geen DB-cursor. In plaats daarvan retourneert het een document met aggregatieresultaten. Het werkt door tussentijdse resultaten te produceren bij elke stap van de pijplijn en dus is de volgorde van bewerkingen er echt toe.

Ik denk dat MongoDB de volgorde voor cursormodificatiemethoden niet ondersteunt vanwege de manier waarop het intern is geïmplementeerd.

U kunt niet pagineren op een resultaat van een aggregatieraamwerk, omdat er maar één document is met alleen resultaten. U kunt nog steeds pagineren op een gewone zoekopdracht door overslaan en beperken te gebruiken, maar het is beter om een ​​bereikquery te gebruiken vanwege de efficiëntie van het gebruik van een index.

UPDATE:

Sinds v2.6 retourneert Mongo-aggregatieframework een cursor in plaats van een enkel document. Vergelijk:v2.4 en v2.6 .



  1. Hoe kunt u uw MongoDB-applicatie-upgrades testen?

  2. MySQL Master-Slave-replicatie instellen op Ubuntu 18.04

  3. Verbinding maken met MongoDB met behulp van PDO-stuurprogramma

  4. Foutmelding in mongodb-castprobleem voor geldige object-ID