sql >> Databáze >  >> NoSQL >> MongoDB

Jak MongoDB zachází s dotazy find().sort() s ohledem na jednoduché a složené indexy?

Pokud jsem pochopil váš názor, mohlo by vám pomoci toto:

Za předpokladu, že máte tyto dokumenty pro ukázku

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

Krok 1:máte index pouze pro filed1 (název indexu pole1_1 )}:proveďte :db.test3.find({field1:1}).sort({field2:1})

mongo používá pole1_1 index pro vyhledávání v dokumentu. výsledek .explain() je:

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

Krok 2:Přidejte svůj složený index, pojmenujte jej pole1_1_pole2_1 , nyní máte 2 index pro pole 1.

provést find().sort() dotaz, budete mít

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

Závěr:

pokud používáte db.test3.find({field1:1}).sort({field2:1}) , mongo použije field1_1_field2_1 index.

pokud používáte db.test3.find({field1:1}) , mongo použije field1_1 index.

Ve vašem případě, pokud máte pouze pole1_1_pole2_1 index a provádíte db.test3.find({field1:1}) , mongo použije field1_1_field2_1 index také.




  1. mongodb nodejs - převod kruhové struktury

  2. MongoDBOobject se nepřidává dovnitř smyčky rrd foreach casbah scala apache spark

  3. Dotaz ve funkci MongoDB Map Reduce

  4. Jak získat binární stream pomocí GridFS ObjectId s Spring Data MongoDB