MongoDB - Normal İfade

Normal İfadeler, herhangi bir dizede bir kalıp veya kelime aramak için tüm dillerde sıklıkla kullanılır. MongoDB ayrıca, dizgi örüntüsü eşleştirmesi için düzenli ifade işlevselliği sağlar.$regexŞebeke. MongoDB, normal ifade dili olarak PCRE'yi (Perl Uyumlu Normal İfade) kullanır.

Metin aramanın aksine, normal ifadeleri kullanmak için herhangi bir yapılandırma veya komut yapmamıza gerek yoktur.

Adlı bir veritabanına bir belge eklediğimizi varsayalım posts aşağıda gösterildiği gibi -

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

Normal ifade İfadesini kullanma

Aşağıdaki normal ifade sorgusu, dize içeren tüm gönderileri arar tutorialspoint içinde -

> 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"
	]
}
>

Aynı sorgu şu şekilde de yazılabilir -

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

Büyük / Küçük Harfe Duyarlı Olmadan Normal İfadeyi Kullanma

Arama durumunu duyarsız hale getirmek için, $options değerli parametre $i. Aşağıdaki komut, kelimesini içeren dizeleri arayacaktır.tutorialspoint, daha küçük veya büyük duruma bakılmaksızın -

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

Bu sorgudan döndürülen sonuçlardan biri, kelimesini içeren aşağıdaki belgedir tutorialspoint farklı durumlarda -

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

Dizi Öğeleri için normal ifade kullanma

Ayrıca dizi alanında regex kavramını da kullanabiliriz. Etiketlerin işlevselliğini uyguladığımızda bu özellikle çok önemlidir. Bu nedenle, tutorial (öğretici veya öğreticiler veya öğretici nokta veya tutorialphp) sözcüğünden başlayan etiketlere sahip tüm gönderileri aramak istiyorsanız, aşağıdaki kodu kullanabilirsiniz -

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

Normal İfade Sorgularını Optimize Etme

  • Belge alanları indexed, sorgu, normal ifadeyle eşleştirmek için dizine alınmış değerlerden faydalanır. Bu, tüm koleksiyonu tarayan normal ifadeye kıyasla aramayı çok hızlı hale getirir.

  • Normal ifade bir prefix expressiontüm eşleşmelerin belirli bir karakter dizisi ile başlaması amaçlanmıştır. Örneğin, normal ifade ifadesi^tut, ardından sorgu yalnızca ile başlayan dizeleri aramalıdır. tut.