MongoDB Aggregation Temelleri: Ana Kavramlar ve Örnekler

MongoDB, NoSQL veritabanlarında güçlü veri işleme özellikleriyle dikkat çeker. Aggregation pipeline, MongoDB'de verileri dönüştürmek, gruplamak ve analiz etmek için kullanılan temel bir araçtır. Bu yazıda, MongoDB aggregation pipeline’ın temel kavramlarını, sık kullanılan aşamalarını ve pratik örneklerle nasıl çalıştığını açıklayacağız.
Aggregation Pipeline Nedir?
Aggregation pipeline, MongoDB'de verilerin bir dizi işlem aşamasından (stages) geçirilerek dönüştürülmesini sağlar. Her aşama, belgeleri işler ve sonucu bir sonraki aşamaya aktarır. Bu, karmaşık veri analizlerini ve özetlemeleri kolayca yapmanızı mümkün kılar.
Yaygın Aggregation Aşamaları
$match
: Verileri filtreler, SQL’dekiWHERE
koşuluna benzer.$group
: Belgeleri bir anahtara göre gruplar ve özet hesaplamalar yapar.$sort
: Sonuçları belirli bir alana göre sıralar.$project
: Çıktıya hangi alanların dahil edileceğini belirler veya yeni alanlar oluşturur.$lookup
: Farklı koleksiyonlardan veri birleştirir, SQL’dekiJOIN
işlemine benzer.$addFields
: Belgelerinize yeni alanlar ekler veya mevcut alanları dönüştürür.
Örnek 1: Filtreleme ve Gruplama
Diyelim ki bir orders
koleksiyonunuz var ve her siparişte müşteri kimliği (customerId
), toplam tutar (total
) ve tarih (date
) bulunuyor. Müşteri bazında toplam sipariş tutarını hesaplamak istiyorsunuz:
copydb.orders.aggregate([ { $match: { date: { $gte: ISODate("2025-01-01") } } }, { $group: { _id: "$customerId", totalSpent: { $sum: "$total" } } }, { $sort: { totalSpent: -1 } }, ]);
$match
: 2025 sonrası siparişleri filtreler.$group
: Müşterilere göre gruplar ve toplam harcamayı hesaplar.$sort
: Sonuçları toplam harcamaya göre azalan sırada sıralar.
Örnek 2: Alan Dönüştürme ve Filtreleme
Bir users
koleksiyonunda kullanıcıların isimleri (name
) ve yaşları (age
) var. 30 yaşından büyük kullanıcıların sadece isimlerini almak istiyorsunuz:
copydb.users.aggregate([ { $match: { age: { $gt: 30 } } }, { $project: { name: 1, _id: 0 } }, ]);
$match
: Yaşı 30’dan büyük kullanıcıları seçer.$project
: Sadecename
alanını döndürür,_id
’yi hariç tutar.
Örnek 3: $lookup ile Veri Birleştirme
Farklı koleksiyonlar arasında ilişki kurmak için $lookup
kullanılır. Örneğin, orders
koleksiyonundaki siparişlerin müşteri bilgilerini customers
koleksiyonundan çekmek istiyorsunuz:
copydb.orders.aggregate([ { $match: { date: { $gte: ISODate("2025-01-01") } } }, { $lookup: { from: "customers", localField: "customerId", foreignField: "_id", as: "customerInfo", }, }, { $project: { customerInfo: { name: 1 }, total: 1, _id: 0 } }, ]);
$match
: 2025 sonrası siparişleri filtreler.$lookup
:orders
koleksiyonundakicustomerId
ilecustomers
koleksiyonundaki_id
’yi eşleştirir ve müşteri bilgilerinicustomerInfo
dizisine ekler.$project
: Sadece müşteri adı ve sipariş toplamını döndürür.
Örnek 4: $addFields ile Yeni Alan Ekleme
orders
koleksiyonunda her sipariş için bir vergi alanı (tax
) hesaplayıp eklemek istiyorsunuz. Vergi, toplam tutarın %10’u olsun:
copydb.orders.aggregate([ { $match: { date: { $gte: ISODate("2025-01-01") } } }, { $addFields: { tax: { $multiply: ["$total", 0.1] } } }, { $project: { customerId: 1, total: 1, tax: 1, _id: 0 } }, ]);
$match
: 2025 sonrası siparişleri filtreler.$addFields
: Her belgeyetotal
’ın %10’u olarak birtax
alanı ekler.$project
: Müşteri kimliği, toplam ve vergi alanlarını döndürür.
Aggregation’ın Avantajları ve Kullanım Alanları
Aggregation pipeline, büyük veri kümelerinde analiz yapmayı kolaylaştırır. Örneğin:
- Raporlama: Satış verilerini özetlemek.
- Veri Birleştirme: Farklı koleksiyonlardan verileri bir araya getirmek.
- Veri Dönüştürme: Belgeleri farklı bir formata çevirmek veya yeni alanlar eklemek.
- Filtreleme ve Analiz: Karmaşık sorgularla veri alt kümeleri oluşturmak.
Ne Zaman Kullanmalı?
Aggregation, basit sorguların ötesine geçtiğinizde devreye girer. Verilerinizi gruplandırmanız, birleştirmeniz, özetlemeniz veya dönüştürmeniz gerektiğinde aggregation pipeline mükemmel bir seçimdir. Performans için pipeline’ı optimize etmek önemlidir; örneğin, $match
aşamasını en başa koyarak veri kümesini erkenden küçültmek faydalıdır.
Sonuç
MongoDB aggregation pipeline, verileri esnek ve güçlü bir şekilde işlemek için vazgeçilmez bir araçtır. $match
, $group
, $sort
, $project
, $lookup
ve $addFields
gibi aşamalar, karmaşık analizleri basit bir akışa dönüştürür. Projenizin ihtiyaçlarına göre bu aşamaları birleştirerek verilerinizden maksimum fayda sağlayabilirsiniz.