sql >> Database teknologi >  >> NoSQL >> MongoDB

Effektiv paginering af MongoDB-aggregering?

I MongoDB markørmetoder (dvs. når du bruger find() ) som limit , sort , skip kan anvendes i enhver rækkefølge => rækkefølgen er ligegyldig. En find() returnerer en markør, hvorpå ændringerne er anvendt. Sortering udføres altid før grænse, spring udføres også før grænse. Så med andre ord er rækkefølgen:sortér -> spring over -> grænse .

Aggregationsramme returnerer ikke en DB-markør. I stedet returnerer den et dokument med resultater af aggregering. Det virker ved at producere mellemresultater på hvert trin i pipelinen, og derfor betyder rækkefølgen af ​​operationer virkelig noget.

Jeg gætter på, at MongoDB ikke understøtter rækkefølge for markørmodifikatormetoder på grund af den måde, det er implementeret internt på.

Du kan ikke paginere på et resultat af aggregeringsramme, fordi der er et enkelt dokument med kun resultater. Du kan stadig paginere på en almindelig forespørgsel ved at bruge spring og begræns, men en bedre praksis ville være at bruge en intervalforespørgsel på grund af dets effektivitet ved at bruge et indeks.

OPDATERING:

Siden v2.6 Mongo returnerer aggregeringsramme en markør i stedet for et enkelt dokument. Sammenlign:v2.4 og v2.6 .



  1. Hvordan udfører jeg et fund ved hjælp af $geoIntersects / 2dsphere i et array-underfelt?

  2. MongoDb TTL på indlejret dokument er muligt?

  3. Har node.js server brug for internetforbindelse for at køre?

  4. beregne gennemsnit i Mongoose