MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как MongoDB третира find().sort() заявки по отношение на единични и съставни индекси?

Ако разбрах мисълта ви, това може да помогне:

Ако приемем, че имате тези документи за проба

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

Стъпка 1:имате индекс само за filed1 (име на индекс field1_1 )}:изпълнете :db.test3.find({field1:1}).sort({field2:1})

mongo използва field1_1 индекс за търсене в документа. резултатът от .explain() е:

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

Стъпка 2:добавете своя съставен индекс, наименувайте го field1_1_field2_1 , сега имате 2 индекса за поле 1.

изпълнете find().sort() заявка, ще имате

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

Заключение:

ако използвате db.test3.find({field1:1}).sort({field2:1}) , mongo ще използва field1_1_field2_1 индекс.

ако използвате db.test3.find({field1:1}) , mongo ще използва field1_1 индекс.

Аз вашият случай, ако имате само field1_1_field2_1 индекс и изпълнявате db.test3.find({field1:1}) , mongo ще използва field1_1_field2_1 както и индекс.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. как работи индексът Mongodb?

  2. Каква е основната архитектура на приложение node.js + mongodb?

  3. Как да внедря пост етикети в Mongo?

  4. Грешка [ERR_HTTP_HEADERS_SENT] Не може да се зададат заглавки, след като са изпратени на клиента

  5. Как да извършите поръчка на базата на стойност в MongoDB?