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.