MongoDB Aggregate geçmeden önce MongoDB, özellikle NoSQL dünyasında oldukça popüler bir veritabanı yönetim sistemidir. Esnek yapısı ve ölçeklenebilir olması sayesinde büyük veri yönetiminde tercih edilir. MongoDB’nin sunduğu en güçlü özelliklerden biri ise MongoDB Aggregate işlevidir. Bu yazıda, aggregate işleminin ne olduğu, nasıl kullanıldığı ve örneklerle nasıl verimli hale getirilebileceği üzerinde duracağız.
Aggregate Nedir?
‘Aggregate‘, MongoDB’de verileri toplamak, analiz etmek ve dönüştürmek için kullanılan bir işlemdir. SQL veritabanlarındaki ‘GROUP BY' ve ‘JOIN‘ işlemlerine benzer işlevleri yerine getirir. MongoDB aggregate fonksiyonu, verilerin çeşitli aşamalardan geçerek istenilen sonuçları ürettiği bir veri işlem hattı (pipeline) gibi çalışır. Bu aşamalar arasında filtreleme, gruplama, sıralama, projeksiyon ve daha birçok işlem yer alabilir.
MongoDB Aggregate İşlem Hatları (Pipeline)
Bir ‘aggregate‘ sorgusu, bir veya daha fazla aşamadan oluşur ve her aşama, veri işlem hattındaki verileri bir sonraki aşama için şekillendirir. En yaygın kullanılan aşamalar şunlardır:
- $match: Verileri filtrelemek için kullanılır. SQL’deki WHERE koşuluna benzer.
{ $match: { status: "active" } }
- $group: Verileri belirli bir kritere göre gruplar ve genellikle toplama fonksiyonlarıyla birlikte kullanılır.
{ $group: { _id: "$category", total: { $sum: "$amount" } } }
- $sort: Verileri belirli bir kritere göre sıralar.
{ $sort: { total: -1 } } // total’a göre azalan sırayla
- $project: Hangi alanların sonuçta gösterileceğini belirler. SQL’deki SELECT ifadesine benzer.
{ $project: { name: 1, total: 1 } }
- $limit: Sonuçlardan yalnızca belirli sayıda döndürmek için kullanılır.
{ $limit: 5 }
- $lookup: Diğer koleksiyonlarla join yapmak için kullanılır.
{ $lookup: { from: "orders", localField: "customerId", foreignField: "_id", as: "orders" } }
Basit Bir Örnek Üzerinde aggregate Kullanımı
Diyelim ki bir e-ticaret veritabanınız var ve her bir kategoride satılan toplam ürün miktarını bulmak istiyorsunuz. Bunu aggregate kullanarak şu şekilde yapabiliriz:
const result = await this.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$category", totalSold: { $sum: "$quantity" } } },
{ $sort: { totalSold: -1 } },
{ $project: { _id: 0, category: "$_id", totalSold: 1 } }
])
Bu örnekte:
- $match aşamasıyla yalnızca tamamlanmış satışları filtreledik.
- $group aşamasıyla satışları kategoriye göre grupladık ve her kategori için toplam satılan miktarı hesapladık.
$sort
aşamasıyla kategorileri, toplam satılan miktara göre azalan sırayla sıraladık.- $project aşamasıyla son çıktıda sadece category ve totalSold alanlarını gösterdik.
Yazar’dan Tavsiyeler;

İndeksler: aggregate işlemlerinin performansını artırmak için doğru alanlarda indeksler oluşturmak önemlidir. Özellikle $match
ve $sort
aşamalarında kullanılan alanlar üzerinde indeks oluşturulması, sorguların daha hızlı çalışmasını sağlar.
Pipeline Aşamalarının Sırası: Daha verimli sonuçlar elde etmek için veri setini küçülten $match ve $limit gibi aşamaları olabildiğince erken kullanmaya çalışın.
MongoDB aggregate
işlemi, veritabanındaki verileri analiz etmek ve raporlamak için son derece güçlü ve esnek bir araçtır. Doğru kullanıldığında, büyük ve karmaşık veri setlerinden hızlı ve anlamlı sonuçlar elde etmenizi sağlar. Geliştiricilerin bu işlemi verimli bir şekilde kullanabilmesi, uygulamaların performansını artıracak ve daha derin veri analizi yapmalarını sağlayacaktır.
Ayrıca Mamba Mentalitesini inceleğim yazıyı da buraya tıklayarak okuyabilirsiniz.