Se ho capito il tuo punto, questo potrebbe aiutare:
Supponendo che tu abbia questi documenti come campione
{
field1 : 1,
field2 : 2,
},
{
field1 : 2,
field2 : 3,
},
{
field1 : 1,
field2 : 4,
}
Passaggio 1:hai l'indice solo per filed1 (nome dell'indice campo1_1 )}:esegui :db.test3.find({field1:1}).sort({field2:1})
il mongo usa field1_1 indice per cercare nel documento. il risultato di .explain() è:
"cursor" : "BtreeCursor field1_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,
Passaggio 2:aggiungi il tuo indice composto, chiamalo campo1_1_campo2_1 , ora hai 2 indici per il campo 1.
esegui find().sort()
query, avrai
"cursor" : "BtreeCursor field1_1_field2_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,
Confusione:
se usi db.test3.find({field1:1}).sort({field2:1})
, il mongo utilizzerà field1_1_field2_1
indice.
se utilizzi db.test3.find({field1:1})
, il mongo utilizzerà field1_1
indice.
Nel tuo caso, se hai solo field1_1_field2_1 index e stai eseguendo db.test3.find({field1:1})
, il mongo utilizzerà field1_1_field2_1
anche l'indice.