Ungkapan biasa MongoDB
Ungkapan biasa menggunakan rentetan tunggal untuk menerangkan dan memadankan siri rentetan yang sepadan dengan peraturan sintaks tertentu.
Banyak bahasa pengaturcaraan menyokong operasi rentetan menggunakan ungkapan biasa.
MongoDB menggunakan operator $regex untuk menetapkan ungkapan biasa yang sepadan dengan rentetan.
MongoDB menggunakan PCRE (Perl Compatible Regular Expression) sebagai bahasa ungkapan biasa.
Tidak seperti carian teks penuh, kami tidak perlu melakukan sebarang konfigurasi apabila menggunakan ungkapan biasa.
Pertimbangkan struktur dokumen koleksi siaran berikut, yang mengandungi kandungan artikel dan teg:
{ "post_text": "enjoy the mongodb articles on tutorialspoint", "tags": [ "mongodb", "tutorialspoint" ] }
Gunakan ungkapan biasa
di bawah Perintah menggunakan ungkapan biasa untuk mencari artikel yang mengandungi rentetan w3cschool.cc:
>db.posts.find({post_text:{$regex:"w3cschool.cc"}})
Pertanyaan di atas juga boleh ditulis sebagai:
>db.posts.find({post_text:/w3cschool.cc/})
Ungkapan biasa tidak sensitif huruf besar
Jika carian perlu tidak peka huruf besar-besaran, kami boleh menetapkan $options kepada $i.
Arahan berikut akan mencari rentetan tidak peka huruf besar-besaran w3cschool.cc:
>db.posts.find({post_text:{$regex:"w3cschool.cc",$options:"$i"}})
Semua data yang mengandungi rentetan w3cschool.cc akan dikembalikan dalam koleksi dan tidak peka huruf besar-kecil:
{ "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on W3Cschool.cc", "tags" : [ "tutorialspoint" ] }
Elemen tatasusunan menggunakan ungkapan biasa
Kami juga boleh menggunakan ungkapan biasa dalam medan tatasusunan untuk mencari kandungan. Ini sangat berguna dalam pelaksanaan teg, jika anda perlu mencari data teg yang bermula dengan tutorial (tutorial atau tutorial atau tutorialpoint atau tutorialphp), Anda boleh menggunakan kod berikut:
>db.posts.find({tags:{$regex:"tutorial"}})
Optimumkan pertanyaan ungkapan biasa
Jika medan dalam dokumen anda diindeks, maka menggunakan indeks adalah lebih baik daripada ungkapan biasa Padanan ungkapan mencari semua data untuk masa pertanyaan yang lebih pantas.
Jika ungkapan biasa ialah ungkapan awalan, semua data yang sepadan akan bermula dengan rentetan awalan yang ditentukan. Contohnya: Jika ungkapan biasa ialah ^tut , pernyataan pertanyaan akan mencari rentetan bermula dengan tut.
Terdapat dua perkara yang perlu diperhatikan apabila menggunakan ungkapan biasa:
Pembolehubah digunakan dalam ungkapan biasa. Anda mesti menggunakan eval untuk menukar rentetan gabungan Anda tidak boleh terus menggabungkan rentetan dan menghantarnya ke dalam ungkapan. Jika tidak, tiada mesej ralat dilaporkan, tetapi hasilnya kosong! Contohnya adalah seperti berikut:
var name=eval("/" + 变量值key +"/i");
Berikut ialah pertanyaan kabur yang mengandungi kata kunci tajuk dan tidak peka huruf besar-kecil:
title:eval("/"+title+"/i") // 等同于 title:{$regex:title,$Option:"$i"}