Seharusnya tidak berfungsi sama sekali di versi sebelumnya, karena setidaknya Anda telah memodifikasi cakupan this
untuk sekarang merujuk ke "data" sebagai elemen tingkat atas. Singkatnya, ini tidak lagi diizinkan dan Anda benar-benar tidak boleh menggunakan metode JavaScript kecuali Anda benar-benar harus melakukannya. Meski begitu, mungkin masih ada cara yang lebih baik dalam banyak kasus.
Namun sebenarnya ini adalah penggunaan pencocokan JavaScript yang tidak perlu karena tidak diperlukan bila ada operator lain yang akan melakukan ini.
Anda harus menggunakan $regex
bentuk sebagai gantinya:
db.docs.find({ "data.First_name": /^kim/i })
Atau di mana saja di dalam bidang, hapus tanda sisipan ^
:
db.docs.find({ "data.First_name": /kim/i })
Yang cukup tidak efisien seperti eksekusi JavaScript tetapi tidak sebanyak tidak ada overhead pemrosesan melalui mesin juru bahasa itu. Dan tentu saja bisa di mana saja.
Pikirkan juga tentang apa yang sebenarnya dilakukan oleh kueri yang mengandalkan JavaScript untuk diselesaikan:
- Memanggil instance penerjemah JavaScript
- Mengonversi jenis dokumen BSON per dokumen ke jenis JavaScript
- Mengevaluasi kode JavaScript dalam penerjemah per dokumen
- Melemparkan JavaScript
true|false
kembali sebagai hasil per dokumen
Mempertimbangkan bahwa $regex
( tetapi dengan kecocokan case-insensitive yang tidak optimal ) melakukan operasi yang sama tetapi menggunakan pustaka C "pcre" secara asli tanpa konversi dan pembuatan ulang per dokumen, maka ini jelas merupakan pilihan yang waras dari keduanya.