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.