Web Programlama

Web Programlama

Agregasyon (Aggregation)

Lisans: Creative Commons 26.11.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: mckare

MongoDB - AGREGASYON (AGGREGATION)

MongoDB’de agregasyon işlemleri denilince dökümanların belli alanlara göre gruplandırılması ve bu gruplar yardımı ile bazı filtreleme ya da hesaplama işlemlerinin yapılmasını anlıyoruz. Bu işlemler SQL’de count() ve group by komutları ile gerçekleştirilir.

Şimdi bu konuyu daha iyi anlayabilmek için özel bir veri seçelim. Bu veri aşağıdaki tabloda verilmiştir:

Sicil ad Bölüm Maaş

234

ali can

Satis

5000

112

okan sert

pazarlama

3000

567

ayse akıner

Satis

1800

777

mehmet özer

teknik destek

4500

222

melih sahin

pazarlama

3300

765

mehmet cenk

satis

2200

454

selin seker

teknik destek

3400

432

berna bilen

muhasebe

4500

113

deniz ikiler

muhasebe

2300

 

 

Bu tabloyu person adlı veri tabanında pers adlı koleksiyon içine yükleyelim:

​
> USE person
 
switched TO db person
 
> db.pers.INSERT({"sicil":234,"ad":"ali can","bolum":"satis","maas":5000 })
 
WriteResult({ "nInserted" : 1 })
 
> db.pers.INSERT({"sicil":112,"ad":"okan sert","bolum":"pazarlama","maas":3000 })
 
WriteResult({ "nInserted" : 1 })
 
> db.pers.INSERT({"sicil":567,"ad":"ayse akıner","bolum":"satis","maas":1800 })
 
WriteResult({ "nInserted" : 1 })
 
> db.pers.INSERT({"sicil":777,"ad":"mehmet özer","bolum":"teknik destek","maas":4500 })
 
WriteResult({ "nInserted" : 1 })
 
> db.pers.INSERT({"sicil":222,"ad":"melih sahin","bolum":"pazarlama","maas":3300 })
 
WriteResult({ "nInserted" : 1 })
 
> db.pers.INSERT({"sicil":765,"ad":"mehmet cenk","bolum":"satis","maas":2200 })
 
WriteResult({ "nInserted" : 1 })
 
> db.pers.INSERT({"sicil":454,"ad":"selin seker","bolum":"teknik destek","maas":3400 })
 
WriteResult({ "nInserted" : 1 })
 
> db.pers.INSERT({"sicil":432,"ad":"berna bilen","bolum":"muhasebe","maas":4500 })
 
WriteResult({ "nInserted" : 1 })
 
> db.pers.INSERT({"sicil":113,"ad":"deniz ikiler","bolum":"muhasebe","maas":2300 })
 
WriteResult({ "nInserted" : 1 })
 
Click and drag to move
​

Yüklediğimiz koleksiyonu listeleyelim:

> db.pers.find().pretty()

{

    "_id" : ObjectId("5406dcc3f13cf7fb97cab716"),

    "sicil" : 234,

    "ad" : "ali can",

    "bolum" : "satis",

    "maas" : 5000

}

{

    "_id" : ObjectId("5406dd14f13cf7fb97cab717"),

    "sicil" : 112,

    "ad" : "okan sert",

    "bolum" : "pazarlama",

    "maas" : 3000

}

{

    "_id" : ObjectId("5406e45bf13cf7fb97cab718"),

    "sicil" : 567,

    "ad" : "ayse akıner",

    "bolum" : "satis",

    "maas" : 1800

}

{

    "_id" : ObjectId("5406e4aaf13cf7fb97cab719"),

    "sicil" : 777,

    "ad" : "mehmet özer",

    "bolum" : "teknik destek",

    "maas" : 4500

}

{

    "_id" : ObjectId("5406e52ef13cf7fb97cab71a"),

    "sicil" : 222,

    "ad" : "melih sahin",

    "bolum" : "pazarlama",

    "maas" : 3300

}

{

    "_id" : ObjectId("5406e588f13cf7fb97cab71b"),

    "sicil" : 765,

    "ad" : "mehmet cenk",

    "bolum" : "satis",

    "maas" : 2200

}

{

    "_id" : ObjectId("5406e5d8f13cf7fb97cab71c"),

    "sicil" : 454,

    "ad" : "selin seker",

    "bolum" : "teknik destek",

    "maas" : 3400

}

{

    "_id" : ObjectId("5406e625f13cf7fb97cab71d"),

    "sicil" : 432,

    "ad" : "berna bilen",

    "bolum" : "muhasebe",

    "maas" : 4500

}

{

    "_id" : ObjectId("5406e653f13cf7fb97cab71e"),

    "sicil" : 113,

    "ad" : "deniz ikiler",

    "bolum" : "muhasebe",

    "maas" : 2300

}

SORU:

 

Şimdi şu işlemi gerçekleştirmek istiyoruz: “Her bölümde çalışan kişi sayılarını listeleyiniz!”

 

ÇÖZÜM:

 

Bu sorunun cevabını aggregate() fonksiyonu ile aşağıdaki ifade ile bulabiliriz:

 

> db.pers.aggregate([{$group : {_id : "$bolum" ,personel_sayisi : {$sum : 1}}}])

Bu komut sonucunda aşağıdaki çıktı elde edilecektir:

{ "_id" : "muhasebe", "personel_sayisi" : 2 }

{ "_id" : "teknik destek", "personel_sayisi" : 2 }

{ "_id" : "pazarlama", "personel_sayisi" : 2 }

{ "_id" : "satis", "personel_sayisi" : 3 }

> 

SORU:

Her bölümdeki maas ortalamasını bulunuz!

ÇÖZÜM:

Bu sorunun çözümü avg() fonksiyonunu uygun biçimde kullanarak oluşturulur:

> db.pers.aggregate([{$group : {_id : "$bolum" ,ortalama_maas : {$avg : "$maas"}}}])

> 

Sonuçta aşağıdaki çıktı elde edilecektir:

{ "_id" : "muhasebe", "ortalama_maas" : 3400 }

{ "_id" : "teknik destek", "ortalama_maas" : 3950 }

{ "_id" : "pazarlama", "ortalama_maas" : 3150 }

{ "_id" : "satis", "ortalama_maas" : 3000 }

> 

SORU:

Her bölümdeki en yüksek maaşı bulunuz!

ÇÖZÜM:

> db.pers.aggregate([{$group : {_id : "$bolum" ,ortalama_maas : {$max: "$maas"}}}])

{ "_id" : "muhasebe", "ortalama_maas" : 4500 }

{ "_id" : "teknik destek", "ortalama_maas" : 4500 }

{ "_id" : "pazarlama", "ortalama_maas" : 3300 }

{ "_id" : "satis", "ortalama_maas" : 5000 }

> 

Sorunun cevabı olan MongoDB komutu ve çıktısı aşağıdadır:

SORU:

Her bölümdeki en düşük maaşı bulunuz!

ÇÖZÜM:

Sorunun cevabı olan MongoDB komutu ve çıktısı aşağıdadır:

> db.pers.aggregate([{$group : {_id : "$bolum" ,ortalama_maas : {$min: "$maas"}}}])

{ "_id" : "muhasebe", "ortalama_maas" : 2300 }

{ "_id" : "teknik destek", "ortalama_maas" : 3400 }

{ "_id" : "pazarlama", "ortalama_maas" : 3000 }

{ "_id" : "satis", "ortalama_maas" : 1800 }

>