MongoDB documenta conselhos que:
A coluna de classificação deve ser a última coluna usada no índice
Aqui está o exemplo:
db.foo.ensureIndex({a: 1, b: 1, c: 1})
Bom:
find(a=1).sort(a)
find(a=1).sort(b)
find(a=1, b=2).sort(c)
Mau:
find(a=1).sort(c)
even though c is the last column used in the index, a is that last column used, so you can only sort on a or b.
alguém pode explicar isso. Por que find(a=1).sort(c)
considerado ruim?
Pense no índice como a seção de negócios da lista telefônica.
Existem vários níveis de tipos:
a
seria categoria, como "Médicos"b
seria o sobrenome, como "Smith"c
seria o primeiro nome, como "John"As listagens (linhas) são classificadas em ordem de Categoria -> Sobrenome -> Nome
Usando este modelo, como você pode encontrar médicos nomeados
John
sem saber os sobrenomes? A resposta é, você não pode , sem olhar para cada registro (o que significa não usar o índice).Em seus exemplos de trabalho, você usa todos os campos da esquerda para a direita sem pular nenhum nível.
No seu exemplo não funcional, você está procurando o último campo e o primeiro sem saber nada no meio. Você não pode chegar ao último nível sem saber o que está no meio.