sql >> Database >  >> NoSQL >> MongoDB

Hoe behandelt MongoDB find().sort()-query's met betrekking tot enkele en samengestelde indexen?

Als ik je punt begrijp, kan dit helpen:

Ervan uitgaande dat u deze documenten als voorbeeld heeft

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

Stap 1:u heeft alleen een index voor filed1 (naam van index field1_1 )}:voer de :db.test3.find({field1:1}).sort({field2:1}) uit

de mongo gebruikt field1_1 index om in het document te zoeken. het resultaat van .explain() is:

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

Stap 2:voeg uw samengestelde index toe, noem deze field1_1_field2_1 , nu heb je 2 indexen voor veld 1.

voer find().sort() uit vraag, heb je

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

Conclusie:

als u db.test3.find({field1:1}).sort({field2:1}) gebruikt , de mongo gebruikt field1_1_field2_1 index.

als u db.test3.find({field1:1}) . gebruikt , de mongo gebruikt field1_1 index.

Ik ben uw zaak, als u slechts field1_1_field2_1 . heeft index en u voert db.test3.find({field1:1}) uit , de mongo gebruikt field1_1_field2_1 index ook.




  1. Waarom krijg ik een pymongo.cursor.Cursor wanneer ik mijn mongodb db via pymongo probeer te bevragen?

  2. Een JSON-bestand opslaan met GridFs

  3. Opslaan en ophalen van JavaScript-objecten in/van MongoDB

  4. Hoe krijg ik een binaire stream door GridFS ObjectId met Spring Data MongoDB