Düzenli ifadeler, temelde belgelerdeki bulgu dizeleri için olan desen eşleştirmesi için kullanılır.
Bazen bir koleksiyondaki belgeleri alırken, tam olarak neyi arayacağınızı tam olarak bilemeyebilirsiniz. Bu nedenle, örüntü eşleştirme arama değerlerine göre verilerin geri alınmasına yardımcı olmak için normal ifadeler kullanılabilir.
Bu eğitimde öğreneceksiniz -
- Kalıp eşleştirme için $ regex operatörünü kullanma
- $ Options ile Örüntü Eşleştirme
- Normal ifade operatörü olmadan kalıp eşleştirme
- Bir koleksiyondan son 'n' belge getiriliyor
Kalıp eşleştirme için $ regex operatörünü kullanma
MongoDB'deki normal ifade operatörü, koleksiyondaki belirli dizeleri aramak için kullanılır. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.
"Employeeid" ve "EmployeeName" Alan adlarına sahip aynı Çalışan koleksiyonumuza sahip olduğumuzu varsayalım. Ayrıca koleksiyonumuzda aşağıdaki belgelerin bulunduğunu varsayalım.
Çalışan kimliği | İşçi adı |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
Aşağıdaki kodda, arama kriterlerini belirtmek için normal ifade operatörünü kullandık.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Kod Açıklaması:
- Burada, içinde 'Gu' karakterleri bulunan tüm Çalışan Adlarını bulmak istiyoruz. Bu nedenle, 'Gu' arama kriterlerini tanımlamak için $ regex operatörünü belirtiriz
- Printjson, sorgu tarafından döndürülen her belgeyi daha iyi bir şekilde yazdırmak için kullanılmaktadır.
Komut başarıyla yürütülürse, aşağıdaki Çıktı gösterilecektir:
Çıktı:
Çıktı, Çalışan Adının 'Gu' karakterlerini içerdiği belgelerin döndürüldüğünü açıkça gösterir.
Koleksiyonunuzun, Çalışan Adını "Guru999" olarak içeren ek bir belgeyle birlikte aşağıdaki belgelere sahip olduğunu varsayalım. Arama kriterini "Guru99" olarak girdiyseniz, "Guru999" içeren belgeyi de döndürür. Ancak bunu istemediğimizi ve belgeyi yalnızca "Guru99" ile iade etmek istediğimizi varsayalım. O zaman bunu tam desen eşleştirme ile yapabiliriz. Tam bir desen eşlemesi yapmak için ve $ karakterini kullanacağız. Dizenin başına karakterini ve dizenin sonuna $ ekleyeceğiz.
Çalışan kimliği | İşçi adı |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
8 | Guru999 |
Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Kod Açıklaması:
- Burada arama kriterlerinde ve $ karakterini kullanıyoruz. ^, Dizenin belirli bir karakterle başladığından emin olmak için kullanılır ve $ dizenin belirli bir karakterle bitmesini sağlamak için kullanılır. Bu nedenle, kod çalıştırıldığında yalnızca "Guru99" adındaki dizeyi getirecektir.
- Printjson, sorgu tarafından döndürülen her belgeyi daha iyi bir şekilde yazdırmak için kullanılmaktadır.
Komut başarıyla yürütülürse, aşağıdaki Çıktı gösterilecektir:
Çıktı:
Çıktıda, "Guru99" dizesinin getirildiği açıkça görülüyor.
$ Options ile Örüntü Eşleştirme
Normal ifade operatörünü kullanırken, $ options anahtar sözcüğünü kullanarak ek seçenekler de sağlanabilir . Örneğin, Çalışan Adında 'Gu' bulunan tüm belgeleri, büyük / küçük harfe duyarlı veya duyarsız olmasına bakılmaksızın bulmak istediğinizi varsayalım. Böyle bir sonuç istenirse, büyük / küçük harf duyarlılığı parametresiyle $ options kullanmamız gerekir .
Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.
"Employeeid" ve "EmployeeName" Alan adlarına sahip aynı Çalışan koleksiyonumuza sahip olduğumuzu varsayalım.
Ayrıca koleksiyonumuzda aşağıdaki belgelerin bulunduğunu varsayalım.
Çalışan kimliği | İşçi adı |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
Şimdi son konudakiyle aynı sorguyu çalıştırırsak, sonuçta "GURU99" olan dokümanı asla göremeyiz. Bunun sonuç kümesine gelmesini sağlamak için, $ options "I" parametresini eklememiz gerekir.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Kod Açıklaması:
- 'I' parametresine sahip $ seçenekleri (büyük / küçük harf duyarlılığı anlamına gelir), 'Gu' harflerini küçük veya büyük harflerle bulsak da, aramayı gerçekleştirmek istediğimizi belirtir.
Komut başarıyla yürütülürse, aşağıdaki Çıktı gösterilecektir:
Çıktı:
- Çıktı, bir belgede "Gu" büyük harf olmasına rağmen, belgenin sonuç kümesinde hala görüntülendiğini açıkça göstermektedir.
Normal ifade operatörü olmadan kalıp eşleştirme
Düzenli ifade operatörü olmadan da desen eşleştirme yapılabilir. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Kod Açıklaması:
- "//" seçenekleri temelde bu sınırlayıcılar içinde arama kriterlerinizi belirtmek anlamına gelir. Bu nedenle, EmployeeName'de 'Gu' bulunan belgeleri tekrar bulmak için / Gu / belirtiyoruz.
Komut başarıyla yürütülürse, aşağıdaki Çıktı gösterilecektir:
Çıktı:
Çıktı, Çalışan Adının 'Gu' karakterlerini içerdiği belgelerin döndürüldüğünü açıkça gösterir.
Bir koleksiyondan son 'n' belge getiriliyor
Bir koleksiyondaki son n belgeyi almanın çeşitli yolları vardır.
Aşağıdaki adımlarla yollardan birine bakalım
Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.
"Employeeid" ve "EmployeeName" Alan adlarına sahip aynı Çalışan koleksiyonumuza sahip olduğumuzu varsayalım.
Koleksiyonumuzda aşağıdaki belgelerin bulunduğunu da varsayalım:
Çalışan kimliği | İşçi adı |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Kod Açıklaması:
1) Belgeleri sorgularken, koleksiyondaki _id alanı değerine göre kayıtları ters sırada sıralamak için sıralama işlevini kullanın. -1, temel olarak belgelerin ters sırada veya azalan sırada sıralanacağını belirtir, böylece son belge görüntülenecek ilk belge olur.
2) Ardından, sadece istediğiniz kayıt sayısını görüntülemek için limit cümlesini kullanın. Burada limit cümlesini (2) belirledik, böylece son iki belgeyi getirecek.
Komut başarıyla yürütülürse, aşağıdaki Çıktı gösterilecektir:
Çıktı:
Çıktı, koleksiyondaki son iki belgenin görüntülendiğini açıkça gösterir. Bu nedenle, koleksiyondaki son 'n' belgeyi almak için, önce belgeleri azalan sırada sıralayabileceğimizi ve ardından gerekli olan 'n' belgeyi döndürmek için limit maddesini kullanabileceğimizi açıkça gösterdik.
Not : Arama 38.000 karakterden daha büyük bir dizide gerçekleştirilirse, doğru sonuçları göstermeyecektir.
Özet:
- Desen eşleştirme, $ regex operatörü ile sağlanabilir. Bu operatör, koleksiyondaki belirli dizeleri bulmak için kullanılabilir.
- Ve $ sembolü, dizenin belirli bir karakterle başladığından emin olmak için kullanılan ile tam metin aramaları için kullanılabilir ve dizenin belirli bir karakterle bitmesini sağlamak için $ kullanılır.
- $ Regex operatörüyle birlikte 'i', büyük / küçük harf duyarlılığını belirtmek için kullanılabilir, böylece dizeler ister küçük ister büyük harf olsun aranabilir.
- Sınırlayıcılar // desen eşleştirme için de kullanılabilir.
- Koleksiyondaki son n belgeyi döndürmek için sıralama ve sınır işlevinin bir kombinasyonunu kullanın. Sıralama işlevi, belgeleri azalan sırayla döndürmek için kullanılabilir; bundan sonra, iade edilen belgelerin sayısını sınırlamak için sınır cümlesi kullanılabilir.