MongoDB Ekspresi Reguler (Regex) dengan Contoh

Ekspresi reguler digunakan untuk pencocokan pola, yang pada dasarnya untuk menemukan string 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 yang memiliki nama Bidang “Employeeid” dan “EmployeeName”. Mari kita asumsikan juga bahwa kita memiliki dokumen berikut dalam koleksi kita.

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

Di sini, di kode di bawah ini kami telah menggunakan operator regex untuk menentukan kriteria pencarian.

Menggunakan $regex Operator untuk Pencocokan Pola

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

Penjelasan Kode:

  1. Di sini kami ingin mencari semua Nama Karyawan yang memiliki karakter 'Gu' di dalamnya. Oleh karena itu, kami menentukan operator $regex untuk menentukan 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 berikut dengan dokumen tambahan yang berisi Nama Karyawan sebagai "Guru999". Jika Anda memasukkan kriteria pencarian sebagai "Guru99", dokumen yang berisi "Guru999" juga akan ditampilkan. Namun, misalkan kita tidak menginginkan ini dan hanya ingin menampilkan dokumen dengan "Guru99". Maka kita dapat melakukannya 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)

Penjelasan Kode:

  1. Di sini, di kriteria pencarian, kami menggunakan karakter ^ dan $. Tanda ^ digunakan untuk memastikan bahwa string dimulai dengan karakter tertentu, dan $ digunakan untuk memastikan bahwa string diakhiri dengan karakter tertentu. Jadi ketika kode dijalankan 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 huruf besar/kecil.

Contoh berikut menunjukkan bagaimana hal ini dapat dilakukan.

Mari kita asumsikan bahwa kita memiliki koleksi Karyawan yang sama yang memiliki nama Bidang “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 query yang sama seperti pada topik sebelumnya, kita tidak akan pernah melihat dokumen dengan “GURU99” sebagai hasilnya. Untuk memastikan ini ada dalam kumpulan hasil, kita perlu menambahkan parameter $options “I”.

Pencocokan Pola dengan $options

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

Penjelasan Kode:

  1. $options dengan parameter 'I' (yang berarti ketidakpekaan huruf besar-kecil) menetapkan bahwa kita ingin melakukan pencarian tidak peduli apakah kita menemukan huruf 'Gu' dalam huruf kecil atau besar.

Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:

Keluaran:

Pencocokan Pola dengan $options

  1. Outputnya dengan jelas menunjukkan bahwa meskipun satu dokumen memiliki huruf besar 'Gu' , dokumen tersebut tetap ditampilkan di kumpulan hasil.

Pencocokan pola tanpa operator regex

Pencocokan pola juga dapat dilakukan tanpa operator regex. Contoh berikut menunjukkan cara melakukannya.

Pencocokan Pola tanpa Regex Operator

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

Penjelasan Kode:

  1. Opsi “//” pada dasarnya berarti menentukan kriteria pencarian Anda dalam pembatas ini. Oleh karena itu, kami menentukan /Gu/ untuk menemukan kembali dokumen-dokumen yang memiliki 'Gu' di Nama Karyawannya.

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 ini

Contoh berikut menunjukkan bagaimana hal ini dapat dilakukan.

Mari kita asumsikan bahwa kita memiliki koleksi Karyawan yang sama yang memiliki nama Bidang “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 Dokumen 'n' terakhir dari Koleksi

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

Penjelasan Kode:

1) Saat menanyakan dokumen, gunakan fungsi sortir untuk mengurutkan rekaman dalam urutan terbalik berdasarkan nilai bidang _id dalam koleksi. Tanda -1 pada dasarnya menunjukkan untuk mengurutkan dokumen dalam urutan terbalik atau 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 batas (2), sehingga akan mengambil dua dokumen terakhir.

Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:

Keluaran:

Mengambil Dokumen 'n' terakhir dari 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.

Kesimpulan

  • Pencocokan pola dapat dilakukan dengan operator $regex. Operator ini dapat digunakan untuk mencari string tertentu dalam koleksi.
  • Simbol ^ dan $ dapat digunakan untuk pencarian teks persis dengan ^ digunakan untuk memastikan bahwa string dimulai dengan karakter tertentu dan $ digunakan untuk memastikan bahwa string diakhiri dengan karakter tertentu.
  • 'i' bersama dengan operator $regex dapat digunakan untuk menentukan ketidakpekaan huruf besar/kecil sehingga string dapat dicari baik dalam huruf kecil atau huruf besar.
  • Pembatas // juga dapat digunakan untuk pencocokan pola.
  • Gunakan kombinasi fungsi pengurutan dan batas untuk mengembalikan n dokumen terakhir dalam koleksi. Fungsi sortir dapat digunakan untuk mengembalikan dokumen dalam urutan menurun dan kemudian klausa batas dapat digunakan untuk membatasi jumlah dokumen yang dikembalikan.