MongoDB Örneklerle Normal İfade (Regex)
Düzenli ifadeler, temel olarak belgelerdeki bulgu dizeleri için olan kalıp eşleştirme için kullanılır.
Bazen bir koleksiyondaki belgeleri alırken tam olarak hangi Alan değerinin aranacağını bilemeyebilirsiniz. Bu nedenle, desen eşleştirme arama değerlerine dayalı olarak verilerin alınmasına yardımcı olmak için normal ifadeler kullanılabilir.
Desen eşleştirme için $regex operatörünü kullanma
The regex operatörü MongoDB koleksiyondaki belirli dizeleri aramak için kullanılır. Aşağıdaki örnek bunun nasıl yapılabileceğini gösterir.
Aynı Çalışan koleksiyonumuzun “Employeeid” ve “EmployeeName” alan adlarına sahip olduğunu varsayalım. Ayrıca koleksiyonumuzda aşağıdaki belgelerin olduğunu varsayalım.
Çalışan kimliği | İşçi adı |
---|---|
22 | YeniMartin |
2 | mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
Aşağıdaki kodda arama kriterlerini belirtmek için regex operatörünü kullandık.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Kod Açıklaması:
- Burada 'Gu' karakterlerini içeren tüm Çalışan Adlarını bulmak istiyoruz. Bu nedenle, 'Gu'nun arama kriterlerini tanımlamak için $regex operatörünü belirtiyoruz
- Printjson, sorgu tarafından döndürülen her belgeyi daha iyi bir şekilde yazdırmak için kullanılıyor.
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östermektedir.
Diyelim ki koleksiyonunuzda Çalışan Adı olarak “Guru999” içeren ek bir belgeyle birlikte aşağıdaki belgeler var. Arama kriterini “Guru99” olarak girdiyseniz, “Guru999” içeren belgeyi de döndürür. Ancak bunu istemediğimizi ve yalnızca “Guru99” içeren belgeyi döndürmek istediğimizi varsayalım. O zaman bunu tam desen eşleştirmesiyle yapabiliriz. Tam desen eşleştirmesi yapmak için ^ ve $ karakterini kullanacağız. Dizenin başına ^ karakterini ve dizenin sonuna $ karakterini ekleyeceğiz.
Çalışan kimliği | İşçi adı |
---|---|
22 | YeniMartin |
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. Yani kod çalıştırıldığında yalnızca “Guru99” isimli dizeyi getirecektir.
- Printjson, sorgu tarafından döndürülen her belgeyi daha iyi bir şekilde yazdırmak için kullanılıyor.
Komut başarıyla yürütülürse, aşağıdaki Çıktı gösterilecektir:
Çıktı:
Çıktıda “Guru99” dizisinin getirildiği açıkça görülmektedir.
$options ile Desen Eşleştirme
Regex operatörünü kullanırken, aynı zamanda ek seçenekler de sağlanabilir. $ seçenekleri anahtar kelime. Örneğin, Çalışan Adında 'Gu' geçen 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ç isteniyorsa, o zaman kullanmamız gerekir. $ seçenekleri büyük/küçük harfe duyarsızlık parametresi ile.
Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.
Alan adları “Employeeid” ve “EmployeeName” olan aynı Employee koleksiyonumuza sahip olduğumuzu varsayalım.
Ayrıca koleksiyonumuzda aşağıdaki belgelerin bulunduğunu varsayalım.
Çalışan kimliği | İşçi adı |
---|---|
22 | YeniMartin |
2 | mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
Şimdi bir önceki başlıktaki sorgunun aynısını çalıştırırsak sonuçta “GURU99” yazan belgeyi asla göremeyiz. Bunun sonuç kümesinde gelmesini sağlamak için $options “I” parametresini eklememiz gerekiyor.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Kod Açıklaması:
- 'I' parametreli $options (büyük/küçük harfe duyarsızlık anlamına gelir), 'Gu' harflerini küçük veya büyük harfle bulmamıza bakılmaksızın 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 belgenin büyük harfi 'Gu' olmasına rağmen belgenin yine de sonuç kümesinde görüntülendiğini açıkça göstermektedir.
Regex operatörü olmadan desen eşleştirme
Regex operatörü olmadan da desen eşleştirmesi yapılabilir. Aşağıdaki örnek bunun nasıl yapılabileceğini gösterir.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Kod Açıklaması:
- “//” seçenekleri temel olarak bu sınırlayıcılar dahilinde arama kriterlerinizi belirtmeniz anlamına gelir. Bu nedenle, ÇalışanAdı'nda 'Gu' bulunan belgeleri tekrar bulmak için /Gu/'yu 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östermektedir.
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.
Alan adları “Employeeid” ve “EmployeeName” olan aynı Employee koleksiyonumuza sahip olduğumuzu varsayalım.
Ayrıca koleksiyonumuzda aşağıdaki belgelerin bulunduğunu varsayalım:
Çalışan kimliği | İşçi adı |
---|---|
22 | YeniMartin |
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, son belgenin görüntülenecek ilk belge olmasını sağlayacak şekilde belgelerin ters sırada veya azalan sırada sıralanacağını belirtir.
2) Daha sonra sadece istediğiniz kayıt sayısını görüntülemek için limit maddesini kullanın. Burada limit maddesini (2) ayarladık, 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östermektedir. Dolayısıyla, koleksiyondaki son 'n' belgeyi getirmek için önce belgeleri azalan düzende sıralayabileceğimizi ve ardından gereken 'n' sayıda belgeyi döndürmek için limit maddesini kullanabileceğimizi açıkça gösterdik.
not: Arama 38,000 karakterden daha uzun bir dize üzerinde yapılırsa doğru sonuçlar görüntülenmez.
ÖZET
- Desen eşleştirmesi $regex operatörüyle sağlanabilir. Bu operatör koleksiyondaki belirli dizeleri bulmak için kullanılabilir.
- ^ ve $ sembolü, tam metin aramaları için kullanılabilir; ^, 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.
- $regex operatörüyle birlikte 'i', büyük/küçük harflere duyarsızlığı belirtmek için kullanılabilir, böylece dizeler küçük veya büyük harflerle aranabilir.
- Sınırlayıcılar // aynı zamanda desen eşleştirme için de kullanılabilir.
- Koleksiyondaki son n belgeyi döndürmek için sıralama ve sınırlama işlevinin bir kombinasyonunu kullanın. Sıralama işlevi, belgeleri azalan sırada döndürmek için kullanılabilir, ardından sınır cümlesi döndürülen belge sayısını sınırlamak için kullanılabilir.