MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Paginação eficiente da agregação do MongoDB?


Nos métodos de cursor do MongoDB (ou seja, ao usar find() ) como limit , sort , skip pode ser aplicado em qualquer ordem => ordem não importa. Um find() retorna um cursor no qual as modificações foram aplicadas. A classificação é sempre feita antes do limite, o salto também é feito antes do limite. Então, em outras palavras, a ordem é:sort -> skip -> limit .

A estrutura de agregação não retorna um cursor de banco de dados. Em vez disso, ele retorna um documento com resultados de agregação. Ele funciona produzindo resultados intermediários em cada etapa do pipeline e, portanto, a ordem das operações realmente importa.

Acho que o MongoDB não suporta a ordem para métodos modificadores de cursor devido à maneira como é implementado internamente.

Você não pode paginar em um resultado da estrutura de agregação porque há um único documento com apenas resultados. Você ainda pode paginar em uma consulta regular usando skip and limit, mas uma prática melhor seria usar uma consulta de intervalo devido à eficiência do uso de um índice.

ATUALIZAÇÃO:

Desde a v2.6, a estrutura de agregação do Mongo retorna um cursor em vez de um único documento. Compare:v2.4 e v2.6 .