MongoDB, NoSQL veritabanı sistemleri arasında en popüler olanlardan biridir. Büyük veriler üzerinde karmaşık sorgular yapabilmek için Aggregation Pipeline adında güçlü bir sorgu sistemi sunar.
Bu rehberde MongoDB’de sık kullanılan aggregation operatörlerini, mantıklarını ve örnek kullanımlarını detaylı şekilde inceleyeceğiz.
1. Aggregation Pipeline Nedir?
Aggregation Pipeline, verileri adım adım işleyerek filtreleme, gruplaya, dönüştürme ve hesaplama yapmamızı sağlayan bir yapıdır. SQL'deki SELECT, WHERE, GROUP BY gibi işlemler tek pipeline içinde yapılabilir.
Basit bir örnek:
db.products.aggregate([
{ $match: { category: "Electronics" } }, // Filtre
{ $group: { _id: "$brand", total: { $sum: 1 } } } // Gruplama ve sayma
]);
2. Temel Pipeline Aşamaları
2.1 $match (Filtreleme)
SQL’deki WHERE gibidir.
{ $match: { status: "active" } }
2.2 $group (Gruplama)
SQL’deki GROUP BY gibidir.
{ $group: { _id: "$category", total: { $sum: 1 } } }
2.3 $project (Alan Seçme/Dönüştürme)
SQL’deki SELECT gibi çalışır.
{ $project: { name: 1, price: 1, totalPrice: { $multiply: ["$price", "$qty"] } } }
2.4 $sort (Sıralama)
{ $sort: { price: -1 } } // Azalan
2.5 $limit ve $skip
Sayfalama işlemlerinde kullanılır.
{ $limit: 10 }
{ $skip: 10 }
2.6 $lookup (Join)
Farklı koleksiyonları birleştirir.
{
$lookup: {
from: "categories",
localField: "category_id",
foreignField: "_id",
as: "category_info"
}
}
3. Mantıksal Operatörler
| Operatör | Açıklama |
|---|---|
$and |
Tüm koşullar sağlanmalı. |
$or |
En az bir koşul sağlanmalı. |
$not |
Koşulun tersini alır. |
$nor |
Hiçbir koşul sağlanmamalı. |
Örnek:
{ $match: { $and: [ { age: { $gte: 18 } }, { status: "active" } ] } }
4. Karşılaştırma Operatörleri
| Operatör | Açıklama |
$eq |
Eşittir (=). |
$ne |
Eşit değil. |
$gt |
Büyük. |
$gte |
Büyük veya eşit. |
$lt |
Küçük. |
$lte |
Küçük veya eşit. |
$in |
Listede var mı. |
$nin |
Listede yok mu. |
5. Matematiksel Operatörler
| Operatör | Açıklama |
$sum |
Toplama veya sayma. |
$avg |
Ortalama. |
$min |
En küçük. |
$max |
En büyük. |
$multiply |
Çarpma. |
$divide |
Bölme. |
$add |
Toplama. |
$subtract |
Çıkarma. |
$mod |
Mod (kalan) hesabı. |
Örnek:
{ $group: { _id: null, totalRevenue: { $sum: "$price" }, avgRevenue: { $avg: "$price" } } }
6. Koşullu Operatörler
| Operatör | Açıklama |
$cond |
IF-ELSE mantığı. |
$ifNull |
Null ise alternatif değer. |
$switch |
Çoklu koşul kontrolü. |
Örnek:
{
$project: {
statusText: {
$cond: { if: { $gte: ["$score", 50] }, then: "Geçti", else: "Kaldı" }
}
}
}
7. Dizi (Array) Operatörleri
| Operatör | Açıklama |
$size |
Dizi uzunluğu. |
$push |
Gruplamada array’e ekler. |
$addToSet |
Tekrar etmeyen ekleme. |
$first |
İlk değer. |
$last |
Son değer. |
$filter |
Diziyi filtreler. |
$map |
Diziyi dönüştürür. |
$reduce |
Diziyi tek değere indirger. |
8. Metin Operatörleri
| Operatör | Açıklama |
$regex |
Regex araması. |
$text |
Full-text search. |
$concat |
String birleştirme. |
$substr |
Parça alma. |
$toLower |
Küçük harf. |
$toUpper |
Büyük harf. |
9. Değişkenler
| Değişken | Açıklama |
$$ROOT |
Tüm belgeyi temsil eder. |
$$CURRENT |
O anki alanı temsil eder. |
$$REMOVE |
Alanı silmek için kullanılır. |
MongoDB’nin Aggregation Pipeline operatörleri sayesinde SQL’de karmaşık olan pek çok işlemi tek sorguda yapabilirsiniz. Bu rehberde anlattığımız operatörler, günlük veri analizi, raporlama ve istatistik çıkarma işlemlerinizde size büyük kolaylık sağlayacaktır.
📌 Tavsiyem:
-
$match’i pipeline’ın en başında kullanın → Performans artar. -
Gereksiz alanları
$projectile çıkarın → Bellek tasarrufu olur. -
Büyük datasetlerde
indexkullanın → Sorgular hızlanır.