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

$elemmatch tidak berfungsi di MongoDB

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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB temukan dalam koleksi dengan kunci yang tidak diketahui

  2. $proyeksi vs $elemMatch

  3. MongoDB:cara mendapatkan db.stats() dari API

  4. Nilai kunci yang berbeda dalam sub-dokumen MongoDB (100 juta catatan)

  5. MongoDB:Menghitung berapa banyak item dengan nilai tertentu yang ada dalam array, yang ada di dokumen?