MongoDB Ekspresi Reguler ($regex) dengan Contoh

โšก Ringkasan Cerdas

MongoDB Ekspresi reguler melakukan pencocokan pola untuk menemukan string di dalam dokumen, menggunakan operator $regex, flag $options untuk ketidakpekaan huruf besar/kecil, jangkar untuk pencocokan persis, dan pembatas garis miring ketika nilai bidang yang tepat tidak diketahui.

  • ๐Ÿ” $regex Operauntuk: db.collection.find({field:{$regex:โ€patternโ€}}) mencocokkan dokumen yang berisi pola tersebut.
  • ๐ŸŽฏ Anchors: ^ dan $ memaksa pencocokan persis, mengikat pola ke awal dan akhir string.
  • ๐Ÿ”  Ketidakpekaan terhadap Huruf Besar/Kecil: Flag 'i' pada $options cocok dengan teks tanpa memperhatikan huruf besar atau kecil.
  • โž— Pembatas Garis Miring: Bungkusping Pola di /โ€ฆ/ cocok tanpa perlu menulis operator $regex.
  • ๐Ÿ“‰ Dokumen N Terakhir: Gabungkan sort({_id:-1}) dengan limit(n) untuk mengembalikan catatan terbaru.
  • ๐Ÿค– Bantuan AI: Asisten membangun pola regex dan menandai biaya kinerja pemindaian koleksi lengkap.

MongoDB Ekspresi Reguler (Regex)

Ekspresi reguler digunakan untuk pencocokan pola, yang pada dasarnya untuk menemukan string di dalam dokumen.

Terkadang saat mengambil dokumen dalam koleksi, Anda mungkin tidak mengetahui secara pasti nilai Bidang yang ingin dicari. Oleh karena itu, seseorang dapat menggunakan ekspresi reguler untuk membantu mengambil data berdasarkan nilai pencarian pencocokan pola.

Menggunakan operator $regex untuk pencocokan Pola

Operator $regex di MongoDB digunakan untuk mencari string tertentu dalam koleksi. Contoh berikut menunjukkan cara melakukannya.

Mari kita asumsikan bahwa kita memiliki koleksi Karyawan yang sama dengan nama Field "Employeeid" dan "EmployeeName". Mari kita juga asumsikan bahwa kita memiliki dokumen-dokumen berikut dalam koleksi kita.

Identitas pegawai nama karyawan
22 Martin Baru
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang

Pada kode di bawah ini, kita telah menggunakan operator $regex untuk menentukan kriteria pencarian.

Menggunakan $regex Operator untuk Pencocokan Pola

db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)

Code Penjelasan:

  1. Di sini kita ingin menemukan semua Nama Karyawan yang mengandung karakter 'Gu'. Oleh karena itu, kita menentukan operator $regex untuk mendefinisikan kriteria pencarian 'Gu'.
  2. Printjson digunakan untuk mencetak setiap dokumen yang dikembalikan oleh kueri dengan cara yang lebih baik.

Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:

Keluaran:

Menggunakan $regex Operator untuk Pencocokan Pola

Outputnya dengan jelas menunjukkan bahwa dokumen yang Nama Karyawannya berisi karakter 'Gu' dikembalikan.

Misalkan koleksi Anda memiliki dokumen-dokumen berikut dengan tambahan satu dokumen yang berisi Nama Karyawan sebagai โ€œGuru999โ€. Jika Anda memasukkan kriteria pencarian sebagai โ€œGuru99โ€, itu juga akan mengembalikan dokumen yang memiliki โ€œGuru999โ€. Tetapi misalkan jika kita tidak menginginkan ini dan hanya ingin mengembalikan dokumen dengan โ€œGuru99โ€. Kemudian kita dapat melakukan ini dengan pencocokan pola yang tepat. Untuk melakukan pencocokan pola yang tepat, kita akan menggunakan karakter ^ dan $. Kita akan menambahkan karakter ^ di awal string dan $ di akhir string.

Identitas pegawai nama karyawan
22 Martin Baru
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
8 Guru999

Contoh berikut menunjukkan bagaimana hal ini dapat dilakukan.

Menggunakan $regex Operator untuk Pencocokan Pola

db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)

Code Penjelasan:

  1. Di sini, dalam kriteria pencarian, kita menggunakan karakter ^ dan $. ^ digunakan untuk memastikan bahwa string dimulai dengan karakter tertentu, dan $ digunakan untuk memastikan bahwa string diakhiri dengan karakter tertentu. Jadi, ketika kode dieksekusi, kode tersebut hanya akan mengambil string dengan nama โ€œGuru99. "
  2. Printjson digunakan untuk mencetak setiap dokumen yang dikembalikan oleh kueri dengan cara yang lebih baik.

Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:

Keluaran:

Menggunakan $regex Operator untuk Pencocokan Pola

Pada output, terlihat jelas bahwa string โ€œGuru99โ€ diambil.

Pencocokan Pola dengan $options

Saat menggunakan operator $regex, seseorang juga dapat memberikan opsi tambahan dengan menggunakan $pilihan kata kunci. Misalnya, Anda ingin menemukan semua dokumen yang memiliki 'Gu' di Nama Karyawannya, terlepas dari apakah dokumen tersebut peka huruf besar-kecil atau tidak peka huruf besar-kecil. Jika hasil seperti itu diinginkan, maka kita perlu menggunakan $pilihan dengan parameter ketidakpekaan terhadap huruf besar/kecil.

Contoh berikut menunjukkan bagaimana hal ini dapat dilakukan.

Mari kita asumsikan bahwa kita memiliki koleksi Karyawan yang sama dengan nama Field "Employeeid" dan "EmployeeName".

Mari kita asumsikan juga bahwa kita memiliki dokumen-dokumen berikut dalam koleksi kita.

Identitas pegawai nama karyawan
22 Martin Baru
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Sekarang, jika kita menjalankan kueri yang sama seperti pada topik sebelumnya, kita tidak akan pernah melihat dokumen dengan "GURU99" dalam hasilnya. Untuk memastikan dokumen ini muncul dalam kumpulan hasil, kita perlu menambahkan parameter "i" pada $options.

Pencocokan Pola dengan $options

db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)

Code Penjelasan:

  1. Opsi $options dengan parameter 'i' (yang berarti tidak peka terhadap huruf besar/kecil) menentukan bahwa kita ingin melakukan pencarian terlepas dari apakah kita menemukan huruf 'Gu' dalam huruf kecil atau huruf besar.

Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:

Keluaran:

Pencocokan Pola dengan $options

  1. Output tersebut dengan jelas menunjukkan bahwa meskipun sebuah dokumen memiliki huruf 'Gu' kapital, dokumen tersebut tetap ditampilkan dalam kumpulan hasil.

Pencocokan pola tanpa operator regex

Pencocokan pola juga dapat dilakukan tanpa operator $regex. Contoh berikut menunjukkan bagaimana hal ini dapat dilakukan.

Pencocokan Pola tanpa Regex Operator

db.Employee.find({EmployeeName: /Gu/}).forEach(printjson)

Code Penjelasan:

  1. Pembatas โ€œ//โ€ pada dasarnya berarti menentukan kriteria pencarian Anda di dalam pembatas ini. Oleh karena itu, kita menentukan /Gu/ untuk kembali menemukan dokumen-dokumen yang memiliki 'Gu' di dalam EmployeeName-nya.

Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:

Keluaran:

Pencocokan Pola tanpa Regex Operator

Outputnya dengan jelas menunjukkan bahwa dokumen yang Nama Karyawannya berisi karakter 'Gu' dikembalikan.

Mengambil dokumen 'n' terakhir dari koleksi

Ada berbagai cara untuk mendapatkan n dokumen terakhir dalam sebuah koleksi.

Mari kita lihat salah satu caranya melalui langkah-langkah berikut.

Contoh berikut menunjukkan bagaimana hal ini dapat dilakukan.

Mari kita asumsikan bahwa kita memiliki koleksi Karyawan yang sama dengan nama Field "Employeeid" dan "EmployeeName".

Mari kita asumsikan juga bahwa kita memiliki dokumen-dokumen berikut dalam koleksi kita:

Identitas pegawai nama karyawan
22 Martin Baru
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Mengambil n dokumen terakhir dari sebuah koleksi.

db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Code Penjelasan:

  1. Saat melakukan kueri untuk dokumen, gunakan fungsi sort untuk mengurutkan catatan dalam urutan terbalik berdasarkan nilai bidang _id dalam koleksi. Angka -1 pada dasarnya menunjukkan untuk mengurutkan dokumen dalam urutan terbalik atau urutan menurun sehingga dokumen terakhir menjadi dokumen pertama yang ditampilkan.
  2. Kemudian gunakan klausa limit untuk hanya menampilkan jumlah record yang Anda inginkan. Di sini kita telah menetapkan klausa limit (2), sehingga akan mengambil dua dokumen terakhir.

Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:

Keluaran:

Mengambil n dokumen terakhir dari sebuah koleksi.

Outputnya dengan jelas menunjukkan bahwa dua dokumen terakhir dalam koleksi ditampilkan. Oleh karena itu kita telah dengan jelas menunjukkan bahwa untuk mengambil dokumen 'n' terakhir dalam koleksi, pertama-tama kita dapat mengurutkan dokumen dalam urutan menurun dan kemudian menggunakan klausa batas untuk mengembalikan jumlah 'n' dokumen yang diperlukan.

Note: Jika pencarian dilakukan pada string yang lebih dari 38,000 karakter, maka tidak akan menampilkan hasil yang benar.

Pertanyaan Umum Demo Slot

Anchor Pola dengan ^ dan $. Pola โ€œ^Guru"99$" hanya cocok dengan "Guru99โ€ dan menolak โ€œGuru999โ€, karena ^ mengikat awal string dan $ mengikat akhir string.

Hanya pola yang peka huruf besar/kecil dengan awalan ^ yang menggunakan indeks secara efisien. Pola yang tidak terikat atau tidak peka huruf besar/kecil akan memicu pemindaian koleksi penuh, jadi ikat awalan tersebut jika memungkinkan.

Dahului metakarakter seperti titik, bintang, plus, atau tanda kurung dengan garis miring terbalik. Misalnya, pola untuk akhiran literal โ€œ.comโ€ mengescape titik sehingga tidak diperlakukan sebagai karakter apa pun.

$regex melakukan pencocokan pola yang fleksibel pada satu bidang dan dapat memindai seluruh koleksi. $text menggunakan indeks teks untuk pencarian berbasis kata yang cepat di seluruh bidang yang diindeks tetapi tidak mendukung pola substring parsial.

Ya. Ketika string yang dicari melebihi sekitar 38,000 karakter, kueri mungkin tidak menghasilkan hasil yang benar. Jaga agar pola dan bidang target berada dalam batas tersebut untuk pencocokan yang andal.

Simpan salinan kolom dalam huruf kecil untuk pencarian yang tidak peka terhadap huruf besar/kecil, jangkar pola dengan ^, dan lebih sukai indeks teks atau Pencarian Atlas pada koleksi besar daripada $regex yang tidak berjangkar.

Asisten AI mengubah aturan bahasa Inggris biasa menjadi pola $regex, menambahkan jangkar dan flag $options yang tepat, serta memperingatkan ketika sebuah kueri akan memicu pemindaian koleksi lengkap yang lambat.

Ya. AI Copilot menulis ulang pola yang tidak terikat, merekomendasikan indeks teks atau Pencarian Atlas, dan mengubah $regex yang tidak peka huruf besar/kecil menjadi pencarian bidang huruf kecil untuk kecepatan.

Ringkaslah postingan ini dengan: