Hvis jeg forstår din pointe, kan dette måske hjælpe:
Forudsat at du har disse dokumenter til eksempel
{
field1 : 1,
field2 : 2,
},
{
field1 : 2,
field2 : 3,
},
{
field1 : 1,
field2 : 4,
}
Trin 1:du har indeks kun for filed1 (navn på indeks felt1_1 )}:udfør :db.test3.find({field1:1}).sort({field2:1})
mongoen bruger field1_1 indeks for at søge i dokumentet. resultatet af .explain() er:
"cursor" : "BtreeCursor field1_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,
Trin 2:Tilføj dit sammensatte indeks, navngiv det field1_1_field2_1 , nu har du 2 indeks for felt 1.
udfør find().sort()
forespørgsel, vil du have
"cursor" : "BtreeCursor field1_1_field2_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,
Konklusion:
hvis du bruger db.test3.find({field1:1}).sort({field2:1})
, vil mongoen bruge field1_1_field2_1
indeks.
hvis du bruger db.test3.find({field1:1})
, vil mongoen bruge field1_1
indeks.
I dit tilfælde, hvis du kun har field1_1_field2_1 indeks, og du udfører db.test3.find({field1:1})
, vil mongoen bruge field1_1_field2_1
indeks også.