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

membuat indeks tertutup untuk kerangka kerja agregasi

Untuk mendapatkan hasil maksimal dari indeks, Anda harus memiliki $match cukup awal di jalur pipa yang menggunakan semua bidang dalam indeks. Dan hindari menggunakan $and operator karena tidak diperlukan dan dalam versi (2.4) saat ini dapat menyebabkan indeks tidak digunakan sepenuhnya (untungnya diperbaiki untuk 2.6 mendatang).

Namun, kuerinya kurang tepat karena Anda perlu menggunakan $elemMatch untuk memastikan elemen yang sama digunakan untuk memenuhi bidang nama dan nilai.

Kueri Anda seharusnya:

db.Phone.aggregate([
{$match: {  type: "Samsung", 
           attributes: { $all: [
                {$elemMatch: {"value":"100", "type" : "BatteryLife" }},
                {$elemMatch: {"value":"200$", "type" : "Price" }}
           ] }
        }
}]);

Sekarang, ini tidak akan menjadi kueri tertutup, karena atribut.nilai dan nama disematkan, belum lagi fakta bahwa nama tidak ada dalam indeks.

Anda memerlukan indeks menjadi {"type":1, "attributes.value":1, "attributes.name":1} untuk performa terbaik, meskipun masih belum tercakup, ini akan jauh lebih selektif daripada sekarang.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bug penamaan koleksi luwak?

  2. mongodb:kueri untuk periode waktu antara dua bidang tanggal

  3. Perbarui properti yang sama dari setiap dokumen koleksi mongoDb dengan nilai yang berbeda

  4. Memasukkan Objek PHP Ke dalam DB MONGO

  5. Bagaimana memvalidasi dalam Mongoose sebuah array dan pada saat yang sama elemen-elemennya