Como a classificação com um índice funciona no MongoDB?

Eu estou querendo saber como a classificação com um índice realmente funciona no MongoDB. Há umcasal artigos na documentação do MongoDB, mas na verdade não descrevem como a classificação ocorre ou a complexidade do tempo. Pesquisas de SO e da interweb em geral até agora não revelaram nada de relevante.

Vamos supor que existema documentos em uma coleção, a cláusula find () correspondeb documentos, há um limite dec documentos devolvidos,a >>b >>cec é um número adequadamente grande, de modo que o conjunto retornado não cabe na memória - digamos 1 milhão de documentos, por exemplo.

No início da operação, existemb documentos que precisam ser classificados e um índice de árvore classificado de tamanhoa para o recurso, os documentos serão classificados por.

Eu posso imaginar:

A) percorra o índice em ordem e, para cada ObjectID, percorra a lista deb documentos. Retornar partidas atéc é atingido. Isso seria O (ab)

B) como A), mas crie um hashset dos ObjectIDs nob documentos primeiro. Este é O (a), mas usa O (b) memória.

Eu tentei considerar tipos baseados em percorrer o conjunto deb documentos, mas parece não conseguir nada mais rápido que O (b registrob), que não é melhor do que classificar sem um índice.

Suponho (mas talvez eu esteja errado) que todo tipo não exija uma verificação de índice, então como ele realmente funciona?

Atualizar:

A resposta de Kevin e o link fornecido restringem bastante a pergunta, mas eu gostaria de confirmar / esclarecer alguns pontos:

Pelo que entendi, você não pode usar índices diferentes para a consulta e a classificação se quiser evitar uma classificação na memória. Quando eu liesta página parecia que você podia (ou pelo menos não especificou uma maneira ou de outra), mas isso parece estar incorreto. Essencialmente, os documentos são classificados porque são procurados na ordem do índice durante a consulta e, portanto, retornados na ordem do índice. Direito?Ao consultar um índice composto, o índice de classificaçãodeve ser o primeiro índice no índice composto, exceto para índices em que a consulta é uma igualdade. Caso contrário, a classificação é realizada na memória. Direito?

Como a classificação funciona com$in ou$or consultas? Por exemplo, suponha que a consulta seja

{a: {$in: [4, 6, 2, 1, 3, 10]}, b: {$gt: 1, $lt: 6}}

... e há um índice composto ema eb naquela ordem. Como a classificação funcionaria nos casos em que está classificadaa oub? $or é ainda mais complicado, pois, no meu entender,$or as consultas são essencialmente divididas em várias consultas separadas. Estão$or consulta sempre uma classificação na memória, pelo menos para mesclar os resultados de consultas separadas?

questionAnswers(1)

yourAnswerToTheQuestion