Ekspresi reguler digunakan untuk pencocokan pola, yang pada dasarnya untuk string temuan dalam dokumen.
Terkadang saat mengambil dokumen dalam koleksi, Anda mungkin tidak tahu persis apa nilai bidang yang tepat untuk dicari. Oleh karena itu, seseorang dapat menggunakan ekspresi reguler untuk membantu dalam mengambil data berdasarkan nilai pencarian pencocokan pola.
Dalam tutorial ini, Anda akan belajar -
- Menggunakan operator $ regex untuk Pencocokan pola
- Pencocokan Pola dengan $ options
- Pencocokan pola tanpa operator regex
- Mengambil dokumen 'n' terakhir dari koleksi
Menggunakan operator $ regex untuk Pencocokan pola
Operator regex di MongoDB digunakan untuk mencari string tertentu dalam koleksi. Contoh berikut menunjukkan bagaimana ini bisa 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 | NewMartin |
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.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Penjelasan Kode:
- Di sini kami ingin menemukan semua Nama Karyawan yang memiliki karakter 'Gu' di dalamnya. Karenanya, kami menetapkan operator $ regex untuk menentukan kriteria pencarian 'Gu'
- Printjson digunakan untuk mencetak setiap dokumen yang dikembalikan oleh kueri dengan cara yang lebih baik.
Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:
Keluaran:
Keluarannya dengan jelas menunjukkan bahwa dokumen-dokumen di mana Nama Karyawan berisi karakter 'Gu' dikembalikan.
Jika misalkan koleksi Anda memiliki dokumen berikut dengan dokumen tambahan 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 bisa melakukan ini dengan pencocokan pola yang tepat. Untuk melakukan pencocokan pola yang tepat, kita akan menggunakan karakter dan $. Kami akan menambahkan karakter di awal string dan $ di akhir string.
Identitas pegawai | nama karyawan |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
8 | Guru 999 |
Contoh berikut menunjukkan bagaimana ini bisa dilakukan.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Penjelasan Kode:
- Di sini, di kriteria pencarian, kami 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 dijalankan itu hanya akan mengambil string dengan nama "Guru99".
- Printjson digunakan untuk mencetak setiap dokumen yang dikembalikan oleh kueri dengan cara yang lebih baik.
Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:
Keluaran:
Pada keluaran, terlihat jelas bahwa string "Guru99" diambil.
Pencocokan Pola dengan $ options
Saat menggunakan operator regex, seseorang juga dapat memberikan opsi tambahan dengan menggunakan kata kunci $ options . Misalnya, Anda ingin menemukan semua dokumen yang memiliki 'Gu' dalam Nama Karyawannya, terlepas dari apakah dokumen tersebut peka huruf besar / kecil atau tidak. Jika hasil seperti itu diinginkan, maka kita perlu menggunakan $ options dengan parameter case insensitivity.
Contoh berikut menunjukkan bagaimana ini bisa 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 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
Sekarang jika kita menjalankan query yang sama seperti pada topik terakhir, kita tidak akan pernah melihat dokumen dengan "GURU99" pada hasilnya. Untuk memastikan ini datang dalam set hasil, kita perlu menambahkan parameter $ options "I".
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Penjelasan Kode:
- $ Options dengan parameter 'I' (yang berarti case insensitivity) 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:
- Keluarannya dengan jelas menunjukkan bahwa meskipun satu dokumen memiliki huruf besar 'Gu', dokumen tersebut masih ditampilkan di set hasil.
Pencocokan pola tanpa operator regex
Seseorang juga dapat melakukan pencocokan pola tanpa operator regex. Contoh berikut menunjukkan bagaimana ini bisa dilakukan.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Penjelasan Kode:
- Opsi "//" pada dasarnya berarti menentukan kriteria pencarian Anda dalam pembatas ini. Karenanya, kami menetapkan / Gu / untuk menemukan kembali dokumen-dokumen yang memiliki 'Gu' di EmployeeName mereka.
Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:
Keluaran:
Keluarannya dengan jelas menunjukkan bahwa dokumen-dokumen di mana Nama Karyawan berisi karakter 'Gu' dikembalikan.
Mengambil dokumen 'n' terakhir dari koleksi
Ada berbagai cara untuk mendapatkan n dokumen terakhir dalam sebuah koleksi.
Mari kita simak salah satu caranya melalui langkah-langkah berikut ini
Contoh berikut menunjukkan bagaimana ini bisa 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 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Penjelasan Kode:
1) Saat membuat kueri untuk dokumen, gunakan fungsi sortir untuk mengurutkan rekaman dalam urutan terbalik berdasarkan nilai bidang _id dalam koleksi. -1 pada dasarnya menunjukkan untuk mengurutkan dokumen dalam urutan terbalik atau menurun sehingga dokumen terakhir menjadi dokumen pertama yang akan ditampilkan.
2) Kemudian gunakan klausa batas untuk hanya menampilkan jumlah rekaman yang Anda inginkan. Di sini kami telah mengatur klausa batas (2), jadi itu akan mengambil dua dokumen terakhir.
Jika perintah berhasil dijalankan, Output berikut akan ditampilkan:
Keluaran:
Keluarannya dengan jelas menunjukkan bahwa dua dokumen terakhir dalam koleksi ditampilkan. Karenanya kami telah menunjukkan dengan jelas bahwa untuk mengambil dokumen 'n' terakhir dalam koleksi, pertama-tama kami dapat mengurutkan dokumen dalam urutan menurun dan kemudian menggunakan klausa limit untuk mengembalikan jumlah 'n' dokumen yang diperlukan.
Catatan : Jika pencarian dilakukan pada string yang lebih besar dari katakanlah 38.000 karakter, itu tidak akan menampilkan hasil yang benar.
Ringkasan:
- Pencocokan pola dapat dilakukan dengan operator $ regex. Operator ini dapat digunakan untuk mencari string tertentu dalam koleksi.
- Simbol dan $ dapat digunakan untuk pencarian teks yang sama 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 apakah dalam huruf kecil atau huruf besar.
- Pembatas // juga dapat digunakan untuk pencocokan pola.
- Gunakan kombinasi fungsi sort dan limit untuk mengembalikan n dokumen terakhir dalam koleksi. Fungsi sortir dapat digunakan untuk mengembalikan dokumen dalam urutan menurun setelah klausa batas dapat digunakan untuk membatasi jumlah dokumen yang dikembalikan.