MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment MongoDB traite-t-il les requêtes find().sort() par rapport aux index simples et composés ?

Si j'ai compris votre point de vue, ceci pourrait aider :

En supposant que vous ayez ces documents pour exemple

{
    field1 : 1,
    field2 : 2,
},
{
    field1 : 2,
    field2 : 3,
},
{
    field1 : 1,
    field2 : 4,
}

Étape 1 :vous avez un index uniquement pour filed1 (nom de l'index field1_1 )} :effectuer le :db.test3.find({field1:1}).sort({field2:1})

le mongo utilise field1_1 index pour rechercher dans le document. le résultat de .explain() est :

"cursor" : "BtreeCursor field1_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,

Étape 2 :ajoutez votre index composé, nommez-le field1_1_field2_1 , vous avez maintenant 2 index pour le champ 1.

effectuer find().sort() requête, vous aurez

"cursor" : "BtreeCursor field1_1_field2_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,

Conclusion :

si vous utilisez db.test3.find({field1:1}).sort({field2:1}) , le mongo utilisera field1_1_field2_1 indice.

si vous utilisez db.test3.find({field1:1}) , le mongo utilisera field1_1 indice.

Dans votre cas, si vous avez juste field1_1_field2_1 index et vous effectuez db.test3.find({field1:1}) , le mongo utilisera field1_1_field2_1 index également.