• Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
mongoDB Agregasyon (Aggregation)

 
#1

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:
Kod:

> 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:
Kod:
> 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:
 
Kod:
> db.pers.aggregate([{$group : {_id : "$bolum" ,personel_sayisi : {$sum : 1}}}])

Bu komut sonucunda aşağıdaki çıktı elde edilecektir:
Kod:
{ "_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:
Kod:
> db.pers.aggregate([{$group : {_id : "$bolum" ,ortalama_maas : {$avg : "$maas"}}}])

>

Sonuçta aşağıdaki çıktı elde edilecektir:
Kod:
{ "_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:
Kod:
> 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:
Kod:
> 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 }

>




Ara
Cevapla


[-]
Hızlı Cevap

İnsan Doğrulama:
Aşağıda görünen onay kutusunu işaretleyiniz. Bu işlem otomatik spam kayıtları önlemek için kullanılır.

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  mongoDB İstemci Oluşturma xray 1 1,537 19-11-2017, Saat: 13:26
Son Yorum: dalaylama
  mongoDB Veritabanındaki Dökümanların Sıralanması xray 0 1,014 18-11-2017, Saat: 20:37
Son Yorum: xray
  mongoDB Veri Tabanı Oluşturma - Use Komutu xray 0 1,110 18-11-2017, Saat: 20:37
Son Yorum: xray
  mongoDB Tablo ve Veri Tipleri xray 0 1,346 18-11-2017, Saat: 20:35
Son Yorum: xray
  MongoDB Kurulumu xray 0 1,008 18-11-2017, Saat: 20:32
Son Yorum: xray

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Konuyu Okuyanlar:
1 Ziyaretçi

   
Türkçe Çeviri: MCTR, Forum Yazılımı: MyBB, © 2002-2020 MyBB Group.  



Merih Forum® bilgi paylaşım platformu. 2015-2020 Tüm hakları saklıdır.