MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

In che modo MongoDB tratta le query find().sort() rispetto agli indici singoli e composti?

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.