sql >> Databasteknik >  >> NoSQL >> MongoDB

Effektiv paginering av MongoDB-aggregation?

I MongoDB markörmetoder (dvs när du använder find() ) som limit , sort , skip kan appliceras i valfri ordning => ordning spelar ingen roll. En find() returnerar en markör på vilken ändringar tillämpas. Sortering görs alltid före gräns, hoppa över görs också före gräns. Så med andra ord är ordningen:sortera -> skippa -> limit .

Aggregationsramverket returnerar inte en DB-markör. Istället returnerar den ett dokument med resultat av aggregering. Det fungerar genom att producera mellanliggande resultat vid varje steg i pipelinen och därför spelar ordningen av operationer verkligen roll.

Jag antar att MongoDB inte stöder order för markörmodifieringsmetoder på grund av hur det är implementerat internt.

Du kan inte paginera på ett resultat av aggregeringsramverket eftersom det finns ett enda dokument med endast resultat. Du kan fortfarande paginera på en vanlig fråga genom att använda skip och limit, men en bättre praxis skulle vara att använda en intervallfråga eftersom det är effektivt att använda ett index.

UPPDATERING:

Sedan v2.6 Mongo returnerar aggregeringsramverket en markör istället för ett enda dokument. Jämför:v2.4 och v2.6 .



  1. Konfigurera MongoDB-CR-autentisering som standard på MongoDB 3.x

  2. OData - Konstigt index med MongoDB [Mongoose:Cast Error]

  3. Ansluter till MongoDB Atlas från firebase-funktioner

  4. Ohanterat löftesavslag:Fel:URL felaktig, kan inte tolkas