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

Como o MongoDB trata as consultas find().sort() com relação a índices simples e compostos?


Se eu entendi seu ponto, isso pode ajudar:

Supondo que você tenha esses documentos para amostra
{
    field1 : 1,
    field2 : 2,
},
{
    field1 : 2,
    field2 : 3,
},
{
    field1 : 1,
    field2 : 4,
}

Etapa 1:você tem um índice apenas para filed1 (nome do índice campo1_1 )}:execute o :db.test3.find({field1:1}).sort({field2:1})

o mongo usa field1_1 índice para pesquisar no documento. o resultado de .explain() é:
"cursor" : "BtreeCursor field1_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,

Etapa 2:adicione seu índice composto, nomeie-o field1_1_field2_1 , agora você tem 2 índices para o campo 1.

execute find().sort() consulta, você terá
"cursor" : "BtreeCursor field1_1_field2_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,

Conclusão:

se você usar db.test3.find({field1:1}).sort({field2:1}) , o mongo usará field1_1_field2_1 índice.

se você usar db.test3.find({field1:1}) , o mongo usará field1_1 índice.

No seu caso, se você tiver apenas field1_1_field2_1 index e você está executando db.test3.find({field1:1}) , o mongo usará field1_1_field2_1 índice também.