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 .