MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana MongoDB memperlakukan kueri find().sort() sehubungan dengan indeks tunggal dan majemuk?

Jika saya mengerti maksud Anda, ini mungkin membantu:

Dengan asumsi Anda memiliki dokumen-dokumen ini untuk sampel

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

Langkah 1:Anda memiliki indeks hanya untuk filed1 (nama indeks bidang1_1 )}:lakukan :db.test3.find({field1:1}).sort({field2:1})

mongo menggunakan field1_1 indeks untuk mencari di dokumen. hasil dari .explain() adalah:

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

Langkah 2:tambahkan indeks gabungan Anda, beri nama field1_1_field2_1 , sekarang Anda memiliki 2 indeks untuk bidang 1.

lakukan find().sort() kueri, Anda akan memiliki

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

Kesimpulan:

jika Anda menggunakan db.test3.find({field1:1}).sort({field2:1}) , mongo akan menggunakan field1_1_field2_1 indeks.

jika Anda menggunakan db.test3.find({field1:1}) , mongo akan menggunakan field1_1 indeks.

Saya kasus Anda, Jika Anda baru saja field1_1_field2_1 indeks dan Anda melakukan db.test3.find({field1:1}) , mongo akan menggunakan field1_1_field2_1 indeks juga.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose + lodash memperpanjang penyalinan array objek secara tidak benar

  2. Mongodb findOne () tidak mengembalikan nilai nodejs

  3. Optimasi - temukan di semua bidang dalam skema Mongoose MongoDB

  4. Node.js + MongoDB - findOne() mengembalikan satu bidang tidak berfungsi

  5. Rentang kueri untuk pagination MongoDB