MongoDB - Ekspresi Reguler

Ekspresi Reguler sering digunakan dalam semua bahasa untuk mencari pola atau kata dalam string apa pun. MongoDB juga menyediakan fungsionalitas ekspresi reguler untuk pencocokan pola string menggunakan ekstensi$regexoperator. MongoDB menggunakan PCRE (Perl Compatible Regular Expression) sebagai bahasa ekspresi reguler.

Tidak seperti pencarian teks, kita tidak perlu melakukan konfigurasi atau perintah apa pun untuk menggunakan ekspresi reguler.

Asumsikan kita telah memasukkan dokumen ke dalam database bernama posts seperti yang ditunjukkan di bawah ini -

> db.posts.insert(
{
   "post_text": "enjoy the mongodb articles on tutorialspoint",
   "tags": [
      "mongodb",
      "tutorialspoint"
   ]
}
WriteResult({ "nInserted" : 1 })

Menggunakan ekspresi regex

Kueri ekspresi reguler berikut mencari semua entri yang berisi string tutorialspoint di dalamnya -

> db.posts.find({post_text:{$regex:"tutorialspoint"}}).pretty()
{
	"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
	"post_text" : "enjoy the mongodb articles on tutorialspoint",
	"tags" : [
		"mongodb",
		"tutorialspoint"
	]
}
{
	"_id" : ObjectId("5dd7d111f1dd4583e7103fe2"),
	"post_text" : "enjoy the mongodb articles on tutorialspoint",
	"tags" : [
		"mongodb",
		"tutorialspoint"
	]
}
>

Kueri yang sama juga dapat ditulis sebagai -

>db.posts.find({post_text:/tutorialspoint/})

Menggunakan ekspresi regex dengan Case Insensitive

Untuk membuat kasus pencarian tidak sensitif, kami menggunakan $options parameter dengan nilai $i. Perintah berikut akan mencari string yang memiliki kata tersebuttutorialspoint, terlepas dari kasus kecil atau kapital -

>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})

Salah satu hasil yang dikembalikan dari kueri ini adalah dokumen berikut yang berisi kata tersebut tutorialspoint dalam kasus yang berbeda -

{
   "_id" : ObjectId("53493d37d852429c10000004"),
   "post_text" : "hey! this is my post on TutorialsPoint", 
   "tags" : [ "tutorialspoint" ]
}

Menggunakan regex untuk Array Elements

Kita juga bisa menggunakan konsep regex pada bidang array. Ini sangat penting saat kami menerapkan fungsionalitas tag. Jadi, jika Anda ingin mencari semua posting yang memiliki tag dimulai dari kata tutorial (baik tutorial atau tutorial atau tutorialpoint atau tutorialphp), Anda dapat menggunakan kode berikut -

>db.posts.find({tags:{$regex:"tutorial"}})

Mengoptimalkan Kueri Ekspresi Reguler

  • Jika bidang dokumen indexed, kueri akan menggunakan make menggunakan nilai yang diindeks untuk mencocokkan ekspresi reguler. Ini membuat pencarian menjadi sangat cepat dibandingkan dengan ekspresi reguler yang memindai seluruh koleksi.

  • Jika ekspresi reguler adalah a prefix expression, semua kecocokan dimaksudkan untuk dimulai dengan karakter string tertentu. Misalnya, jika ekspresi regex adalah^tut, maka kueri harus mencari hanya string yang diawali dengan tut.