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

Pipa dan indeks agregasi

Umumnya, hanya operator pipeline yang dapat diratakan ke kueri normal ($match , $limit , $sort , dan $skip ) akan dapat menggunakan indeks pada koleksi. Inilah salah satu alasan $geoNear operator yang ditambahkan di 2.4 harus berada di awal pipeline.

Setelah Anda mengubah dokumen dengan $project , $group , atau $unwind indeks tidak lagi valid/dapat digunakan.

Jika Anda memiliki indeks pada bidang array, Anda masih dapat menggunakannya sebelum $unwind untuk mempercepat pemilihan dokumen untuk disalurkan dan selanjutnya menyempurnakan dokumen yang dipilih dengan $match second kedua .

Pertimbangkan dokumen seperti:

{ tags: [ 'cat', 'bird', 'blue' ] }

Dengan indeks pada tags .

Jika Anda hanya ingin mengelompokkan tag yang dimulai dengan b maka Anda dapat melakukan agregasi seperti:

{ pipeline: [
      { $match : { tags : /^b/ } },
      { $unwind : '$tags' },
      { $match : { tags : /^b/ } },
      /* the rest */
  ] }

$match pertama apakah butiran kasar cocok menggunakan indeks pada tags .

Pertandingan kedua setelah $unwind tidak akan dapat menggunakan indeks (dokumen di atas sekarang menjadi 3 dokumen) tetapi dapat mengevaluasi setiap dokumen tersebut untuk menyaring dokumen tambahan yang dibuat (untuk menghapus { tags :'cat' } dari contoh).

HTH - Rob.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menyimpan hasil kueri (satu dokumen) ke dalam variabel?

  2. Properti tambahan validasi MongoDB jsonSchema

  3. Cara mengonversi BSON::Stempel waktu ke waktu ruby ​​dan sebaliknya

  4. Memulai dengan Python dan MongoDB

  5. Bagaimana mengatasi MongoError:pool hancur saat terhubung ke CosmosDB