Ungkapan biasa digunakan untuk pemadanan corak, yang pada dasarnya adalah untuk rentetan penemuan dalam dokumen.
Kadang-kadang semasa mengambil dokumen dalam koleksi, anda mungkin tidak tahu dengan tepat berapa nilai Medan yang tepat untuk dicari. Oleh itu, seseorang boleh menggunakan ungkapan biasa untuk membantu mendapatkan data berdasarkan pola carian yang sesuai dengan nilai.
Dalam tutorial ini, anda akan belajar -
- Menggunakan operator $ regex untuk pemadanan Corak
- Padankan Corak dengan pilihan $
- Padankan corak tanpa operator regex
- Mengambil dokumen 'n' terakhir dari koleksi
Menggunakan operator $ regex untuk pemadanan Corak
Operator regex di MongoDB digunakan untuk mencari rentetan tertentu dalam koleksi. Contoh berikut menunjukkan bagaimana ini dapat dilakukan.
Mari kita anggap bahawa kita mempunyai koleksi Karyawan yang sama dengan nama Bidang "Employeeid" dan "EmployeeName". Mari 'anggap juga bahawa kami mempunyai dokumen berikut dalam koleksi kami.
ID pekerja | Nama Pekerja |
22 | BaruMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
Di sini dalam kod di bawah ini kami telah menggunakan operator regex untuk menentukan kriteria carian.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Penjelasan Kod:
- Di sini kita ingin mencari semua Nama Pekerja yang mempunyai watak 'Gu' di dalamnya. Oleh itu, kami menentukan operator $ regex untuk menentukan kriteria carian 'Gu'
- Printjson digunakan untuk mencetak setiap dokumen yang dikembalikan oleh pertanyaan dengan cara yang lebih baik.
Sekiranya arahan itu berjaya dilaksanakan, Output berikut akan ditunjukkan:
Pengeluaran:
Hasilnya jelas menunjukkan bahawa dokumen-dokumen di mana Nama Pekerja mengandungi watak 'Gu' dikembalikan.
Sekiranya andaikan koleksi anda mempunyai dokumen berikut dengan dokumen tambahan yang mengandungi Nama Pekerja sebagai "Guru999". Sekiranya anda memasukkan kriteria carian sebagai "Guru99", itu juga akan mengembalikan dokumen yang mempunyai "Guru999". Tetapi andaikan jika kita tidak menginginkan ini dan hanya mahu mengembalikan dokumen tersebut dengan "Guru99". Kemudian kita boleh melakukan ini dengan pencocokan corak yang tepat. Untuk membuat padanan corak yang tepat, kita akan menggunakan watak dan $. Kami akan menambahkan watak di awal rentetan dan $ di hujung rentetan.
ID pekerja | Nama Pekerja |
22 | BaruMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
8 | Guru999 |
Contoh berikut menunjukkan bagaimana ini dapat dilakukan.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Penjelasan Kod:
- Di sini dalam kriteria carian, kami menggunakan watak dan $. Digunakan untuk memastikan bahawa tali bermula dengan watak tertentu, dan $ digunakan untuk memastikan bahawa rentetan berakhir dengan watak tertentu. Oleh itu, apabila kod dijalankan, ia hanya akan mengambil rentetan dengan nama "Guru99".
- Printjson digunakan untuk mencetak setiap dokumen yang dikembalikan oleh pertanyaan dengan cara yang lebih baik.
Sekiranya arahan itu berjaya dilaksanakan, Output berikut akan ditunjukkan:
Pengeluaran:
Dalam output, jelas terlihat bahawa rentetan "Guru99" diambil.
Padankan Corak dengan pilihan $
Semasa menggunakan operator regex, seseorang juga dapat memberikan pilihan tambahan dengan menggunakan kata kunci pilihan $ . Contohnya, andaikan anda ingin mencari semua dokumen yang mempunyai 'Gu' di Nama Karyawan mereka, tidak kira sama ada sensitif huruf besar atau tidak sensitif. Sekiranya hasil seperti itu diinginkan, maka kita perlu menggunakan pilihan $ dengan parameter ketidakpekaan kes.
Contoh berikut menunjukkan bagaimana ini dapat dilakukan.
Mari kita anggap bahawa kita mempunyai koleksi Karyawan yang sama dengan nama Bidang "Employeeid" dan "EmployeeName".
Mari 'anggap juga bahawa kami mempunyai dokumen berikut dalam koleksi kami.
ID pekerja | Nama Pekerja |
22 | BaruMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
Sekarang jika kita menjalankan pertanyaan yang sama seperti pada topik terakhir, hasilnya tidak akan pernah kita lihat dalam dokumen dengan "GURU99". Untuk memastikan ini datang dalam set hasil, kita perlu menambahkan parameter $ I "options".
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Penjelasan Kod:
- Opsi $ dengan parameter 'I' (yang bermaksud ketidakpekaan huruf besar) menyatakan bahawa kami ingin melakukan pencarian tidak kira jika kami menemukan huruf 'Gu' dalam huruf kecil atau kecil.
Sekiranya arahan itu berjaya dilaksanakan, Output berikut akan ditunjukkan:
Pengeluaran:
- Hasilnya jelas menunjukkan bahawa walaupun satu dokumen mempunyai huruf besar 'Gu', dokumen tersebut masih dapat dipaparkan dalam kumpulan hasil.
Padankan corak tanpa operator regex
Seseorang juga boleh melakukan pemadanan corak tanpa operator regex. Contoh berikut menunjukkan bagaimana ini dapat dilakukan.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Penjelasan Kod:
- Pilihan "//" pada dasarnya bermaksud menentukan kriteria carian anda dalam pembatas ini. Oleh itu, kami menetapkan / Gu / untuk mencari kembali dokumen-dokumen yang mempunyai 'Gu' di Nama Karyawan mereka.
Sekiranya arahan itu berjaya dilaksanakan, Output berikut akan ditunjukkan:
Pengeluaran:
Hasilnya jelas menunjukkan bahawa dokumen-dokumen di mana Nama Pekerja mengandungi watak 'Gu' dikembalikan.
Mengambil dokumen 'n' terakhir dari koleksi
Terdapat pelbagai cara untuk mendapatkan dokumen terakhir dalam koleksi.
Mari lihat salah satu cara melalui langkah-langkah berikut
Contoh berikut menunjukkan bagaimana ini dapat dilakukan.
Mari kita anggap bahawa kita mempunyai koleksi Karyawan yang sama dengan nama Bidang "Employeeid" dan "EmployeeName".
Mari kita juga menganggap bahawa kita mempunyai dokumen berikut dalam koleksi kami:
ID pekerja | Nama Pekerja |
22 | BaruMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Penjelasan Kod:
1) Semasa meminta dokumen, gunakan fungsi urut untuk menyusun rekod dalam urutan terbalik berdasarkan nilai medan _id dalam koleksi. Pada dasarnya -1 menunjukkan untuk menyusun dokumen dalam urutan terbalik atau menurun sehingga dokumen terakhir menjadi dokumen pertama yang akan dipaparkan.
2) Kemudian gunakan klausa had untuk hanya memaparkan jumlah rekod yang anda mahukan. Di sini kita telah menetapkan klausa had (2), sehingga akan mengambil dua dokumen terakhir.
Sekiranya arahan itu berjaya dilaksanakan, Output berikut akan ditunjukkan:
Pengeluaran:
Hasilnya jelas menunjukkan bahawa dua dokumen terakhir dalam koleksi dipaparkan. Oleh itu, kami telah menunjukkan dengan jelas bahawa untuk mengambil dokumen 'n' terakhir dalam koleksi, pertama-tama kami dapat menyusun dokumen dalam urutan menurun dan kemudian menggunakan klausa had untuk mengembalikan bilangan 'n' dokumen yang diperlukan.
Catatan : Sekiranya carian dilakukan pada rentetan yang lebih besar daripada 38,000 watak, maka ia tidak akan menunjukkan hasil yang tepat.
Ringkasan:
- Pencocokan corak dapat dicapai oleh pengendali $ regex. Operator ini boleh digunakan untuk mencari rentetan tertentu dalam koleksi.
- Simbol dan $ dapat digunakan untuk pencarian teks yang tepat dengan digunakan untuk memastikan bahawa tali bermula dengan watak tertentu dan $ digunakan untuk memastikan bahawa tali berakhir dengan watak tertentu.
- The 'i' bersama dengan pengendali $ regex dapat digunakan untuk menentukan ketidakpekaan huruf besar supaya rentetan dapat dicari sama ada huruf kecil atau kecil.
- Pembatas // juga boleh digunakan untuk pemadanan corak.
- Gunakan kombinasi urutan dan fungsi had untuk mengembalikan dokumen n terakhir dalam koleksi. Fungsi semacam dapat digunakan untuk mengembalikan dokumen dalam urutan menurun setelah itu klausa had dapat digunakan untuk membatasi jumlah dokumen yang dikembalikan.