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

Hvordan behandler MongoDB find().sort()-forespørgsler med hensyn til enkelte og sammensatte indekser?

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å.




  1. java.lang.IncompatibleClassChangeError:Implementering af klasse Mongo

  2. Definering af et Mongoose-skema på farten fra en JSON-formateret 'beskrivelse'

  3. Hvordan udsteder jeg HGET/GET-kommando til Redis Database via Node.js?

  4. Microsoft.Extensions.Caching.Redis vælg en anden database end db0