MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak MongoDB traktuje zapytania find().sort() w odniesieniu do indeksów pojedynczych i złożonych?

Jeśli rozumiem, może to pomóc:

Zakładając, że masz te dokumenty do próbki

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

Krok 1:masz indeks tylko dla filed1 (nazwa indeksu pole1_1 )}:wykonaj :db.test3.find({field1:1}).sort({field2:1})

mongo używa field1_1 indeks do wyszukiwania w dokumencie. wynik .explain() to:

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

Krok 2:dodaj indeks złożony, nazwij go field1_1_field2_1 , teraz masz 2 indeksy dla pola 1.

wykonaj find().sort() zapytanie, będziesz miał

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

Wniosek:

jeśli używasz db.test3.find({field1:1}).sort({field2:1}) , mongo użyje field1_1_field2_1 indeks.

jeśli używasz db.test3.find({field1:1}) , mongo użyje field1_1 indeks.

W twoim przypadku, jeśli masz tylko field1_1_field2_1 indeks i wykonujesz db.test3.find({field1:1}) , mongo użyje field1_1_field2_1 indeks.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Użyj Mongosniff, aby wyjaśnić, co słyszy i mówi Twoja baza danych

  2. jak mogę połączyć się ze zdalnym serwerem mongo z terminala Mac OS?

  3. mongoose geojson w schemacie, błąd nie można wyodrębnić kluczy geograficznych

  4. Dane null po zapisaniu encji za pomocą Moongose ​​i GraphQL

  5. Deserializacja typów polimorficznych za pomocą sterownika MongoDB C#