Solusi Chris Fulstow akan berfungsi (+1), namun, mungkin tidak efisien, terutama jika koleksi Anda sangat besar. Ekspresi reguler yang tidak di-root (tidak diawali dengan ^
, yang mengaitkan ekspresi reguler ke awal string), dan yang menggunakan i
tanda untuk ketidakpekaan huruf besar/kecil tidak akan menggunakan indeks, meskipun indeks itu ada.
Opsi alternatif yang mungkin Anda pertimbangkan adalah mendenormalisasi data Anda untuk menyimpan versi huruf kecil name
bidang, misalnya sebagai name_lower
. Anda kemudian dapat menanyakannya secara efisien (terutama jika diindeks) untuk pencocokan tepat yang tidak peka huruf besar/kecil seperti:
db.collection.find({"name_lower": thename.toLowerCase()})
Atau dengan kecocokan awalan (ekspresi reguler yang di-root) sebagai:
db.collection.find( {"name_lower":
{ $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);
Kedua kueri ini akan menggunakan indeks pada name_lower
.