MongoDB'de zorlu filtrelere nasıl başa çıkılır? Toplama ve ortaklaştırma teknikleri nelerdir? Bu makalede, MongoDB kullanıcılarına zorlu veri filtreleme yöntemlerini öğrenmelerine yardımcı olacak araçlar ve teknikler sunuyoruz Hemen okuyun!
MongoDB, büyük veri kümelerine ölçeklenebilir veri yönetimini sağlayan açık kaynaklı bir NoSQL veritabanıdır. Bu veritabanında oldukça faydalı olan toplama ve ortaklaştırma yöntemleri ile zorlu filtrelemeler yapılabilir. Bu makalede, sizler de MongoDB'de zorlu filtreleme yöntemleri hakkında ayrıntılı bilgi edinecek, özellikle verileri toplama ve ortaklaştırma için kullanılan bu yöntemleri incleyebileceksiniz.
Toplama İşlemleri
MongoDB'de toplama işlemleri oldukça önemlidir. Bu işlemler, verileri gruplamak, belirli alanları çıkarmak ve toplam ve ortalama değerler gibi matematiksel işlemler yapmak için kullanılır. MongoDB, `$group`, `$sum`, `$avg` ve `$project` gibi farklı toplama işlemleri sunar.
`$group`, verileri gruplamak için kullanılır. Bu işlemle birlikte, veriler belirli bir sütuna göre sıralanabilir. `$sum`, belirli bir sütunun toplamını almak için kullanılır. `$avg`, belirli bir sütunun ortalama değerini hesaplamak için kullanılır. `$project`, belirli sütunları seçmek veya çıkarmak için kullanılan bir işlemdir.
Örneğin, bir film veri tabanını ele alalım. Verileri bir kategoriye göre gruplayarak, o kategorideki filmlerin toplam bütçesini veya ortalama süresini hesaplayabiliriz. Ayrıca `$project` işlemiyle belirli sütunları seçerek, yalnızca film adı veya yönetmen adını alabiliriz.
- `$group` işlemi ile verileri gruplama
- `$sum` işlemi ile belirli bir sütunun toplamını alma
- `$avg` işlemi ile belirli bir sütunun ortalama değerini hesaplama
- `$project` işlemi ile belirli sütunları çıkarma veya seçme
$group
$group, MongoDB'de sorgulanan verileri gruplamak için kullanılan önemli bir toplama işlemidir. Sorgulanan verilerin belirli bir alanına göre gruplamayı sağlar.
Örneğin, bir kitap koleksiyonunda kitapların yayın yılına göre gruplanması istenebilir. `$group` kullanılarak, kitapların her yıl için ayrı bir grup oluşturması sağlanabilir.
`$group` işlemi, Aggregation Pipeline'da birden fazla işlemle birlikte kullanılabilir. Bu sayede veriler daha da detaylı bir şekilde çıkarılabilir. `$group` işlemi sonucunda verilerin gruplanması sayesinde, büyük veri kümemizde aradığımız verilere daha hızlı erişebilir ve analiz edebiliriz.
`$group` işlemi, `$sum` ve `$avg` işlemleri gibi diğer toplama işlemleri ile birlikte kullanılabilir. Bu sayede gruplamaya ek olarak, sorgulanan verilerin toplamı veya ortalama değeri hesaplanması mümkün hale gelir. Verilerin belirli bir aralığa göre gruplanması `$group` ile yapılırken, toplama işlemi ile sorgulanan verilere sayısal bir değer eklenmektedir.
`$group` işlemi sayesinde sorgulanan verilerin daha anlamlı bir şekilde gruplanması sağlanır. Bu sayede, büyük veri kümelerinde aranan verilere daha hızlı ve kolay bir şekilde erişmek mümkün olur.
$sum
MongoDB'de, belirli bir koleksiyondaki belirli bir alanın toplamını hesaplamak için `$sum` işlemi kullanılır. Bu işlem sayesinde, veri kümesindeki sayısal verilerin toplamı hesaplanır. `$sum` işlemi, `$group` işlemiyle beraber kullanılır.
Örneğin, bir şirketin veri kümesindeki müşterilerin satın aldığı ürünlerin fiyatları veri tablosunda yer alsın. Bu verileri MongoDB'de toplamak istediğinizde, `$sum` işlemi kullanılır. Şöyle ki;
alan adı | veri tipi |
---|---|
müşteri adı | string |
sipariş numarası | int |
sipariş detayı | array |
ürün adı | string |
ürün fiyatı | int |
Yukarıda verilen tablonun kullanımında, örneğin sipariş detayı alanından ürün fiyatı alanının toplamını hesaplamak için `$sum` işlemi kullanılır. Aşağıdaki MongoDB sorgusu sayesinde, kravat siparişi veren müşteriler için ürün fiyatlarının toplamı hesaplanabilir:
```db.siparisler.aggregate([ { $match: { "siparisDetayi.urunAdi": "kravat" } }, { $group: { _id: "$musteriAdi", toplamFiyat: { $sum: "$siparisDetayi.urunFiyati" } } }]);```
Bu sorgunun sonucunda, kravat siparişi veren her müşterinin toplam harcaması hesaplanır. Sonuç, müşteri adı ve toplam harcama tutarı olarak döndürülür. `$sum` işlemi, çeşitli sorgular ve toplama işlemleri için oldukça kullanışlı ve etkilidir.
$avg
$avg, veri toplama işleminin bir parçası olarak kullanılır ve belirli bir alandaki sayısal değerlerin ortalamasını hesaplar. Örneğin, bir şirketin farklı bölgelerindeki işçilerin maaşlarını karşılaştırmak için kullanılabilir. Avrupa'daki işçilerin maaş ortalamasını hesaplamak isteyen bir şirket, bu işlemi kullanarak kolayca yapabilir.
Örneğin, bir veri kümesinde, A ve B olmak üzere iki alan vardır. A alanı sayısal değerleri içerirken, B alanı bir etiket alanıdır. Verileri B alanına göre gruplamak isterseniz:
A | B |
1 | x |
2 | y |
2 | x |
1 | y |
3 | y |
4 | y |
Bu işlem için "$group" ve "$avg" kullanabiliriz:
db.collection.aggregate([ { $group: { _id: "$B", average_A: { $avg: "$A" } } }])
Bu istek sonucunda, "x" ve "y" etiketlerine sahip her bir veri grubu için, "A" alanındaki sayıların ortalaması hesaplanır. Hesaplama sonuçları "$A_avg" alanında depolanır.
$project
$project, MongoDB'de verilerin belirli alanlarını almak için kullanılan bir toplama işlemidir. Örneğin, bir koleksiyondaki tüm belgeleri almak yerine, sadece belirli bir alanı almak isteyebilirsiniz. Bu durumda, $project işlemi kullanabilirsiniz.
$project, belgelerde yer alması gereken tüm alanları tek tek belirtmenizi sağlar. Yani, belirli bir alan hariç tutulmak üzere tüm alanlar dahil edilir. Örneğin, bir kullanıcının adını ve soyadını almak istiyorsanız, şu şekilde bir kod yazabilirsiniz:
Operatör | Açıklama |
---|---|
$project | Verilerin belirli alanlarını almak için kullanılan operatör. |
_id | Bu alanın yokedilmesi işareti almak için '_id' alanı belirlenir. |
first_name | 'first_name' adlı alanı almak için kullanılır. |
last_name | 'last_name' adlı alanı almak için kullanılır. |
Bu kod, belgelerde yer alan sadece 'first_name' ve 'last_name' alanlarına sahip bir çıktı elde edecektir. Diğer tüm alanlar dışlanacaktır. Böylece, veritabanınızda çok sayıda alan varsa, gereksiz alanları filtrelemenizi ve daha etkili bir yolu elde etmenizi sağlar.
Özetle, $project işlemi, verilerden belirli alanları çıkarmak için kullanılan bir toplama işlemidir. Belirli alanları belirterek, gereksiz alanları dışlayabilir ve daha organize ve etkili bir veri kümesi elde edebilirsiniz.
Ortaklaştırma İşlemleri
MongoDB, ortaklaştırma işlemleri için birkaç farklı yöntem sağlar. Bunların en önemlileri `$lookup`, `$unwind` ve `$graphLookup` işlemleridir.
`$lookup` işlemi, başka bir koleksiyondan veri almak için kullanılır. Bu işlem, iki koleksiyon arasında ilişki kurulduğunda, bir koleksiyondaki verileri diğer koleksiyondaki verilerle eşleştirerek yeni bir çıktı oluşturur. `$unwind` işlemi ise, bir dizi içindeki verileri ayırmak için kullanılır. Bu, verilerde birden fazla değerin olduğu durumlarda faydalıdır.
`$graphLookup` işlemi, grafik verileri arasında sorgu yapmak için kullanılır. Bu işlem, belirli bir düğümden başlayarak grafikte bir yolu takip eder ve eşleşen tüm verileri getirir. Bu işlem, ağaç yapıları veya ilişkiler gibi grafik veriler içeren durumlarda kullanışlıdır.
$lookup
MongoDB'de `$lookup`, bir koleksiyondan verileri diğer bir koleksiyonla birleştirmek için kullanılır. Yani, iki koleksiyon arasında birleştirme işlemi yapmak için kullanılır. Bu işlem sayesinde ilişkisel veritabanlarında olduğu gibi veri tutma işlemi gerçekleştirmiş oluruz.
`$lookup` işlemi, iki alanı birleştirerek yeni bir alan oluşturur ve verinin her iki koleksiyondan da alınmasını gerektirir. Bu işlemi gerçekleştirilebilmesi için her iki koleksiyonda da bir benzerlik gereklidir, bu benzerlik ilişkisinin kurulabilmesi için iki koleksiyon arasında bir referans alanı olmalıdır.
Bir örnek vermek gerekirse, `orders` ve `customers` adlı iki koleksiyonumuz olsun. İlişkisel veritabanlarında, bu koleksiyonlar arasında bir `JOIN` işlemi kullanarak birleştirme işlemi yapabiliriz. Ancak MongoDB'de, `$lookup` işlemi kullanarak bu iki koleksiyonu birleştirebilirsiniz.
customers | orders |
---|---|
{ _id: 1, name: 'John Doe', city: 'New York' } | { _id: 1, customer_id: 1, amount: 100 } |
{ _id: 2, name: 'Jane Doe', city: 'Los Angeles' } | { _id: 2, customer_id: 2, amount: 200 } |
{ _id: 3, name: 'Bob Smith', city: 'Chicago' } | { _id: 3, customer_id: 1, amount: 300 } |
- Başvuru: customers koleksiyonu
- Yerel alan: _id
- Yabancı alan: customer_id (orders koleksiyonunda)
- Yeni alan adı: orders
$unwind
`$unwind` işlemi, MongoDB'deki bir dizi alanının her öğesini ayrı bir belge olarak ayırmanızı sağlar. Bu nedenle, daha sonra `$lookup` işlemi gibi başka bir işlem gerçekleştirmek için verilerin yeniden yapılandırılmasına izin verir. `$unwind` işlemi, dizilerin yanı sıra gömülü belge yapılarını da destekler.
Örneğin, 'orders' koleksiyonunda bir sıraya sahip bir belgeniz varsa ve her siparişin birden çok ürünü varsa, `$unwind` işlemi sipariş belgesini kopyalar ve her ürünü kendi belgesinde yeni bir belge olarak oluşturur. Bu sayede, her ürünün ayrı ayrı sorgulanması daha kolay hale gelir.
`$unwind` İlişkili Parametreleri | |
---|---|
`path` | Ayrıştırılacak alanın adıdır ve birden fazla gömülü alan adı barındırabilir. |
`includeArrayIndex` | Array içindeki belirli bir öğenin konumunu içermesi durumunda, bu parametre kullanılabilir. |
`preserveNullAndEmptyArrays` | Verilerde boş veya şekilsiz alanlar olduğunda bu parametre ayarlanabilir. |
$graphLookup
MongoDB'de ortaklaştırma işlemlerinden biri de `$graphLookup` işlemidir. Bu işlem, grafik verileri arasında sorgu yapmak için kullanılır. `$graphLookup` işlemi, belirtilen koleksiyon içindeki belirli bir alanı, diğer bir koleksiyonun alanıyla karşılaştırarak sorgu yapar. Bu sayede, birden fazla koleksiyon üzerinde karmaşık sorgular yapmak mümkün hale gelir.
$graphLookup işlemi ile, grafik yapısındaki veriler arasında gezinmek ve belirli şartları karşılayan verileri getirmek mümkündür. İşlem, belirli bir koleksiyondaki her bir belgeyi traverse eder ve sonucunda bir ağaç yapısı oluşturur.
$graphLookup işlemi, özellikle sosyal ağlarda ve ağaç yapısıyla tasarlanmış verilerde faydalıdır. Bu işlem sayesinde, belirli bir kullanıcının arkadaşlarına veya ailesine erişmek, bir hiyerarşik yapıdaki verileri sorgulamak veya hatta ürünlerin birbiriyle olan ilişkileri gibi farklı senaryolarda verileri sorgulamak mümkündür.
$graphLookup işlemi, başlangıç düğümü olarak kullanımı gerektirir. Bu düğüm, `$match` veya `$limit` gibi işlemlerle belirlenir. Daha sonra, `$graphLookup` işlemi ile belirli bir koleksiyonda gezinme yapılır ve sonuçta eşleşen veriler getirilir.
Özetle, `$graphLookup` işlemi, grafik yapısındaki veriler arasında sorgu yapmak için kullanılır ve özellikle sosyal ağlar ve ağaç yapısı ile tasarlanmış verilerde faydalıdır. Bu işlem sayesinde, belirli bir kullanıcının arkadaşlarına veya ailesine erişmek, bir hiyerarşik yapıdaki verileri sorgulamak veya ürünlerin birbiriyle olan ilişkileri gibi farklı senaryolarda verileri sorgulamak mümkün hale gelir.