1

Konu: MongoDb ile ilginenlerin dikkatine - ucretsiz kurs.

MongoDb ile ilgilenen arkadaslar varsa, MongoDb'nin arkasindaki sirket 10gen tarafindan ucretsiz kurslar veriliyor.

MongoDb developer: 21 Ocak 2013
MongoDb DBA: 21 Ocak 2013
MongoDb developer for Java developers: 25 Subat 2013

tarihinde yeni donem kurslara basliyor.

-Kurslar ucretsiz (anladik:)
-Ingilizce
-Herhangi birsey bilmediginizi varsayiyor (sifirdan). Kurs sirasinda biraz Python anlatiliyor. Her ne kadar birsey bilmediginizi varsaysa da aslinda biraz JavaScript gerekiyor ama devede kulak kadar. Dil engel degil bahane olur. C# bilen C# ile, Ruby bilen onunla vs yapabilir.
-Belli kurs saatleri yok. Kendiniz istediginiz zaman baglanip videolari izliyorsunuz ve uygulamalari yapiyorsunuz (kendi makinenize Python ve MongoDb kurarak - ya da MongoLab gibi bir yerden 500 Mb bedava kullanim alabilirsiniz - ben kendi makinemi tercih ediyorum).
-Videolarin sonunda quiz ve her hafta sonu odevler var. Kurs sonunda da final sinavi. Quizlerin ortalamaya herhangi bir etkisi yok. Odevler ve final ise yuzde 50-50 etkili. %65 ile sertifikaya hak kazaniyorsunuz.

Ilgileniyorsaniz kayit icin adres:

https://education.10gen.com/

Not: Bu arada kursa katilan olursa haberleselim. Ben Developer ve DBA kurslarina kayit yaptirdim, katiliyorum.

2

Re: MongoDb ile ilginenlerin dikkatine - ucretsiz kurs.

Üstat,

Harikasın. Sayende sürekli yeni bir şeyler öğrenebilmek/bilgi edinmek mümkün oluyor.

MongoDB 'den daha önce kısaca bahsetmiştin, genel olarak forumda da kalıcı bilgi olması ve daha önceden söylediklerini anımsamak adına ( hatta belki daha önceden anlatmadığın yeni bir şeyler daha öğretebilirsin ); MongoDB hakkında kısa bir bilgi ve özellikle MongoDB ile kullanmamız gereken dil(ler) hakkındada bilgi verebilirmisin?

Bilgilerini paylaştığın ve yeniliklerden haberdar ettiğin için şimdiden teşekkürler smile

İyiki varsın!

Sevgiler & Saygılar ...

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: MongoDb ile ilginenlerin dikkatine - ucretsiz kurs.

MongoDb NoSQL serisinden,  key-value dokuman depolayan bir veri tabani.

NoSQL: Aciklamasi tartismali biraz. No SQL mi, Not Only SQL mi kesin degil. Teoriyi birak, pratikte alisilmis tablo ve baglantilarin olmadigi bir database. Normalde bizim alistigimiz, kolonlar, satirlar ile 2 boyutlu tablolar. Tablolar biribirine iliskilerle bagli.

MongoDb'de (NoSQL serisinde bircok database var, MongoDb key-value store grubunda, key-value olanlarin hepsi boyle):

Tablolar yerine Collection var.
Kayit (record) yerine Document var.
Her dokuman icerisinde N tane key:value cifti var,

Ornek:

Kisiler koleksiyonunda:

Key, Value

Adi: Cetin
Soyadi: Basoz

Value kismi yukaridaki gibi basit bir string yerine, array, binary data, yeni bir document vs olabilir. Document ve/veya array olunca da hierarsik bir yapi olusuyor. XML'e benzeyen bir format var ve XML'den daha efektif JSON format (JavaScriptObjectNotation):

{
  Adi: "Cetin",
  Soyadi: "Basoz"
}

Icice dokuman ve array ile:

{
  Adi: "Cetin",
  Soyadi: "Basoz",
  Adres: 
   {
      CaddeNo: 1,
      SokakNo: 2,
      EvNo: 123,
      Ilce: "Merkez",
      Il: "Izmir"
   },
   Telefonlar: [
       { tipi: "Ev", alanKodu: 232 no: 1234567 },
       { tipi: "Cep", alanKodu: 532 no: 1234567 },
       { tipi: "Is", alanKodu: 232 no: 2785565 Dahili: 156 }
   ]
}

Yukaridaki sekilde SQL ile bir yapi yapsaydik en az iki tablo ve join gerekecekti. Bu gene de basit, bazen 6-7 tablo gerektiren isler de var. Burada tek bir "dokuman"da is halledilebiliyor.

MongoDb'nin bir ozelligi, semasiz olmasi. Yani biz ise baslarken tablo dizayn ediyoruz, kolonlari bilmemiz gerekiyor. Sonra bir kac kayit icin bile yeni birsey gerekse yeni kolon ekliyoruz. Oysa MongoDb'de dogrudan yazmaya baslayabiliyorsun. Sakla dediginde ne varsa saklaniyor. Birbirine mantiken yakin fakat icerikleri farkli seyleri boylece rahatlikla ayni "collection"da tutabiliyorsun. Ornegin:

"Cizimler"

{
   Aciklama: "Ekran goruntusu",
   Sekiller: [
       { Tip: "Daire", X: 10, Y: 10, Cap: 5  },
       { Tip: "Kare", X: 20, Y: 10, Width: 2  },
       { Tip: "Dikdortgen", X: 2, Y: 1, Height: 2, Width: 10 }
     ]
}

Yeteri kadar kafa karistirabildim mi bilmiyorum:) Bu daha aybergin ucunun ucu. Arrayler indexlenebiliyor, sanki normal alanmis gibi arama yapilabiliyor vs vs. Geospatial indexleri vs var. Aslinda kullanimi cok kolay. Genel olarak 20-30 sayfalik bir kitapciga sigiyor (tabii detaylari cok daha buyuk kitaplara:)

Ortaya cikislarinin ana nedeni, degisen veri isteklerinin artik SQL databaseler ile karsilanamaz hale gelmesi. Devasa verileriniz olmasa da karmasik joinler filan gerektirmedigi icin cazip bir database.

Dil olarak, ne yazik ki VFP kullanamiyorsunuz. Oyle ODBC veya OLEDB surucusu yok. C#, Java, C++, Python, Ruby, Scala, PHP ... gibi bircok dilde suruculeri var.

http://www.mongodb.org/display/DOCS/Drivers adresinde desteklenen dillerin listesi var. Bir kismi dogrudan mongodb.org tarafindan desteklenen diller, onun disinda bircok community destekli surucu var.

http://www.MongoDb.org

adresinden indirebilir, daha detayli okuyabilirsiniz. Bir ara bende oyle hizli bir giris olsun diye video kaydedeyim. Turkiye'de de olmak uzere baya ciddi kullanicilari var. SAP, ebay, sahibinden.com ... gibi. Liste cok uzun.

(isin ilginci bu database open source ve ucretsiz)

4

Re: MongoDb ile ilginenlerin dikkatine - ucretsiz kurs.

Üstat genel bilgi için teşekkürler;

Bir kaç konuda kafam karıştı. Şöyle ki :
- Tablo filan oluşturmadık, Doğrudan tümcecik katarını yazarak mı insert / update / delete işlemi yapıyoruz?
- VFP ile çalışabilmesinin hiç mi imkanı yok. Gerçi sen diyorsan iyice ölçüp biçmişsindir ama yinede sormadan yapamadım. Alternatif bir kulağı ters gösterme yolu filan olamaz mı?
- Database 'in ölçeklenebilme durumu nedir? Büyük / orta yada küçük boyutlu işler için mi kullanmalıyız!
- Stored Procedure, Trigger, Primary Key, View vs vs. kullanabiliyormuyuz? Yada hiç gerek yok mu ( neden ? )

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

5

Re: MongoDb ile ilginenlerin dikkatine - ucretsiz kurs.

-Evet dogrudan yaz. Kullanmak istedigin database yoksa otomatikman yaratiliyor, icinde kullanmak istedigin collection (tablo) yoksa otomatikman yaratiliyor ve de icine dogrudan koymak istedigin "Save" ediliyor. Save diyorum cunku, MongoDb'de Insert ve Save olmakla birlikte bu saklama islemi Insert OR Update seklinde. Yani normalde bizim yaptigimiz, onceden var mi? varsa update yoksa Insert isi otomatik. Buna "Upsert" de deniyor.

-Kulagi tersten gostermek mumkun tabii. Araya C#, JS vs koyup ona JSON ya da XML gonderip almak var. Olabilir neden olmasin, ama kim ugrasir:) Bu arada, VFP icin JSON parser yazan vardi bir yerlerde.

-Olceklenebilme. Iyi soru, onceden soylerken atlamisim. NoSQL'in ortaya cikis nedeni SQL serisinin ihtiyaci karsilayamamasi demistim. Bu ihtiyacin onemli parcasi olceklenebilirlik. SQL serisi hep scale in tarzi dikine olcekleniyor ve dolayisiyla olceklenemiyor (Turkcesi data miktari vs arttikca daha buyuk ve guclu bilgisayar gerekiyor). NoSQL ise scale out ile horizontal olceklenebilirlige sahip. Yani buyuk guclu bir bilgisayar yerine, bircok kucuk ve daha gucsuz bilgisayar bir arada 'server' olusturuyor. MongoDb'de bir database "Replica set" ile ayni anda N tane kopyesi ile calisabiliyor. Bu isin guvenlik ve yedekli calisma kismi (PRIMARY goctugunde, kalan SECONDARY'ler arasinda yapilan oylamayla secilen onun yerini aliyor - oylama sistemi otomatik ve konfigurasyon ile makinelerin secme - secilme haklari kontrol edilebiliyor). Bir de datanin kendisini makinelere parcalama islemi var. Buna da SHARDING deniyor, her parca da bir SHARD. Cok basit olarak orneklemek gerekirse, 29 adet makine ile SHARDING yaptin. Shard key olarak da soyadinin ilk harfini verdin. Her birinde sadece bir harfle baslayanlarin datasi var. Aramada sen "Basoz" aradiginda sadece "B" yi tutan makineye istek gidiyor. Digerleri o sorguyla mesgul edilmiyor. Bu ayni zamanda basit bir makineyi kabaca 29 kat guclu duruma getiriyor teorik olarak. Isin guzeli butun bu replica ve sharding cok basit bir konfigurasyon dosyasina bakiyor ve otomatik calisiyor. Sen normal tek server baglanir gibi baglanip calisiyorsun.
Bu kadar uzun paragrafin ozeti olceklenebilirlik derdin yok, Ufacik databaseden devasa database'e kullanabilecegin bir sey. Ben o kadarla da ugrasamam biri benim icin bunlari kursun yonetsin vs dersen ozel olarak MongoDb hosting yapan bir suru yer var (bazilari 250-500 Mb arasi "kum havuzu" gir oyna diye ucretsiz veriyor - bildigim tek limit tek database yaratabiliyorsun ve 512 Mb'a kadar).
(Not: Butun o replica ve shardlari test etmek icin tek bir makineye veya tek makinedeki N tane virtual makineye kurabiliyorsun - kurmak darken SQL server kurmak gibi zahmetli islerden bahsetmiyorum.)


- Stored Procedure, Trigger, Primary Key, View vs vs. kullanabiliyormuyuz? Yada hiç gerek yok mu ( neden ? )
Database'de saklanabilen tiplerden birisi "Code". Dogrudan server side kod calistirmak istedigin durumlarda kullanabiliyorsun. Genel olarak bunlara gerek yok. Neden dersen, ben bunlari SQL'de bile neden gerekli oldugunu anlamis degilim ki burada gereksiz oldugunu anlatabileyim:)

View benim en gereksiz bulduklarimdan birisi, yine de gerekli oldugunu varsaysam bile, MongoDb'de join yok, join ihtiyaci da yok. O zaman neyin view'u gibi bir durum oluyor. Bir dokumani aldiginda zaten ihtiyacin olanlari almis oluyorsun (tamamini almak zorunda da degilsin).

Yine de bu soruya cevap vermek icin DBA kursumun bitmesini talep ediyorum:)

Ben oyle uzun paragraflar ve teknik aciklamaya girmeden simdiye kadar en carpici buldugum ozelliklerinden birer satir geceyim:
-Kompleks icice bir veriyi tek hareketde saklama okuma.
-Hierarsik yapidaki datanin herhangi bir seviyesindeki veriye gore sorgulama ( Musteriler.Faturalar.FaturaKalemi.Urun : "Tornavida" gibi)
-Bir key (kolon) icine array veri saklayip bunu indexleyebilme ve dogrudan sorgulayabilme ( Blog.Tags array ise:
Blog.Tags : VFP
Blog.Tags : IN (VFP,C#, F#) - bunlardan birisi olan
Blog.Tags : ALL (VFP,C#, F#) - bunlarin hepsi olan
gibi sorgular (syntax boyle degil)) Tabii bu diziler basit deger yerine subdocument'de olabilirdi. Derinligin siniri yok (tek bir document limiti su anda 16 Mb. Document = Record gibi dusunulunce, VFP'nin tek kayit limiti 64K, SQL server 8K'dan biraz az).
-Cografi indexleme, sorgulama.
-Replikasyon ve partisyon (sharding) islemlerinin basitligi.
-Butun bunlara karsin hierarsik ve kompleks data ile bile yuksek performans (basta hic inanmadigim buydu). SQL serverla yarisamayacagini dusunuyordum yanilmisim, simdi tersini dusunuyorum.

Eger kendin kurup biraz denemek istersen son derece basit. Sifirdan bir video hazirlarim bos zamanda. Hizli baslangic adimlari:

- http://www.mongodb.org adresine gidip downloads'tan indir - 64 bit windows icin 2008R+
- Indrilen dosyalari bir dizine ac (o aciyor zaten, indirilene cift tikla o kadar).
- Diskte c:\data\db dizinini yarat (baska birsey belirtilmeyince kullanilan default data dizini)
- \bin altindaki Mongod.exe dosyasini calistir.
Tebrikler MongoDb server kuruldu calisiyor, gecen sure 2 dk'dan az. Tipki SQL server kurmak gibi smile

Hemen test etmek icin hazir "Mongo Shell"i kullanabilirsin. \bin\Mongo.exe'yi calistir, DOS penceresi acilacak, JavaScript ile kullanabilecegin bir ortam. Server'a baglandi bile (default degerlerle).

(Uyari: Turkce harflerin hicbirine basma. Shell o zaman kapaniyor, bildirdim ama hala ayni shell versiyonu)

use deneme

db.kisiler.save( { ad: "Ugur", soyad: "Yilmaz", diller: ["VFP", "SQL"] })

db.kisiler.find().pretty()

kisi = db.kisiler.findOne( {soyad: "Yilmaz" } )

kisi.diller = ["VFP", "SQL","MongoDb"]

db.kisiler.save(kisi)

db.kisiler.save({ad:"Cetin", soyad: "Basoz", diller: ["VFP","MongoDb","C#"]}) 

db.kisiler.find( {diller:"MongoDb"} ).pretty()

db.kisiler.update( {soyad: "Basoz"}, {$addToSet: {diller: "Ruby" }})

dibi.kisiler.find().pretty()

db.kisiler.update( { soyad: "Yilmaz"}, { $set: { Telefonlar: ["12345"] }} )

db.kisiler.findOne( {soyad: "Yilmaz"} )

db.kisiler.update( { soyad: "Yilmaz"}, { $pushAll: { Telefonlar: ["3456", "38383", "949493"] }} )

db.kisiler.findOne( {Telefonlar: "38383"} )

6

Re: MongoDb ile ilginenlerin dikkatine - ucretsiz kurs.

çetin bu dediğin hayalimde ki db.
üretim maliyeti çok düşük olur.
kurs sonu değerlendirmeni merakla bekliyorum

7

Re: MongoDb ile ilginenlerin dikkatine - ucretsiz kurs.

Üstat,

Üşenmeyip uzun uzun yazmışsın benim kısacık soruma cevap olarak.

Yazdıklarını bir solukta okuyuverdim smile

Tam nede güzelmiş bu mongodb diye düşünüyordum ki ( ki hala öyle düşünüyorum ) bir şey dikkatimi çekti!

Biz veritabanı bile tanımlamadan dataları mongodbye aktardık. İyi, çok güzel, harika! İyide biz bu datalar ile hesaplamar yapıyoruz! Data tipinin Numeric, Float, Tarih, String, GUID ...olması bizim için önemli! Peki data alıp veriyorken, hesaplamayı neye göre yapıcaz!

Kurulum ve ölçeklenebilme kısmı üzerine söylediklerin harika Üstat, VFP sonrası yazmayı düşündüğüm dillerden üçü; PHP, Python ve Ruby + HTML5 ve galiba mongoDB iyi bir seçenek olucak bu dillerle beraber smile

Çok teşekkür ederim.

İyiki varsın smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

8

Re: MongoDb ile ilginenlerin dikkatine - ucretsiz kurs.

Bu arada, mongoDB yi kim kullanır diye google a sordum.  İnanılır gibi değil :

http://www.mongodb.org/display/DOCS/Production+Deployments

SAP, MTV, gittigidiyor.com, sahibinden.com,  Disney, EA, CNN Turk, The Guardian, Forbes, Github, SourgeForge, Foursquar, Viber, A-Saas .... İlk dikkatimi çeken isimler. Liste çok uzun.

Şaşkınlığım biraz daha arttı! smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

9

Re: MongoDb ile ilginenlerin dikkatine - ucretsiz kurs.

Aydin,
Hakikaten benim de hayallerimi susluyor:)

Ugur,
Ben söylemiştim çok ciddi yerler kullanıyor ve liste çok uzun diye:) Listeyi gördüğümde ben de çok şaşırmıştım, o kadarını beklemiyorum doğrusu. Hem onlar 1.x'ten beri kullanıyor. 2.x ile epey bir yenilik geldi ve "karşı" değerlendirmelerin çoğu şimdi geçersiz.

Ya böyle şeyleri "aşkla" yazıyorum üşenmem:)

Data tipleri: Kısa açıklama onların hepsi var ve daha fazlası var:)

Bundan sonrasını yazarken ne kadar uzar bilemem ama okumasan da özeti üst satırda:)

Standard tipleri yazması kolay. "string", 123 gibi. VFP'nin dinamikligi gibi JS veya JSON ile yaziyorsan yazilis seklinden anlasiliyor tip string midir, numeric midir diye. C# gibi bir dil kullaniyorsan (veya Java ...) zaten sen belli bir tipi gonderiyorsun. Dillerin API spesikasyonlarinda hepsi icin tiplerin nasil kullanildigi var. Tarih kullaniyorsan ornegin JS ile ISODate() fonksiyonu kullaniyorsun. C# ile dogrudan DateTime ve boylece saklanan tip tarih oluyor. Aldiginda da tarih olarak aliyorsun.
GUID diye bir tip yok dogrudan (sonucta o 16 bytes bir binary deger - binary tip var). Ancak bu GUID'in amacinin kayitlar icin "ID" olarak kullanmak oldugunu dusununce:

Sen soylemeden her kaydin otomatikman verilen bir "ID" si var ve "default" olarak tipi objectId. Bu object ID ve ObjectID() JS fonksiyonu ile de olusturulabiliyor ya da alinabiliyor.  Kendisi 12 bytes ve bir GUID'e benziyor. Yapisi tamamen dokumente edilmis durumda (olusturulma zamani, olusturan makinenin unique Id'si, o makinede olusturan process Id ve olusturulan kacinci Id oldugunu belirten parcalardan meydana geliyor - uniqu olmalari garanti yani GUID sonucta). MongoDb ayni zamanda convention da kullaniyor ve senin insert ettigin datada _id gorurse kendi otomatik verdigi objectid yerine integer Id kullanmak istedigini ve senin insert ya da save'de kullandigin objede mevcut _id'yi kullaniyor. Ya da mesela C# ile sen bir class propeertysini Id olarak isaretleyebiliyorsun. Id ne istersen olabiliyor, istersen srting istersen bir MongoDb dokumani  yeterki unique olsun.

Numerik datada oyle karmasa yok. Basitce numerik numerik. JS ile yazarken bir sayida nokta yoksa integer varsa decimal. 32 bit clientdan yaziyorsan 32 bit integer, 64 bit de yaziyorsan 64 bit. 64 bitin yazdigini veya update ettigini okuyan 32 bit clientda buyuk sayilar double vs. fazla teknik detaylar. MongoDb'yi uzmuyor sadece senin developer olarak bilmen gerekebilir. Pratik olarak numerik numerik yani, cok kasma:)

Date dedigim gibi clientdan date olarak geldiyse date olarak saklaniyor ve clienta kendi dilinde date olarak veriliyor (aslinda BsonDate tipi, driverlar bu Bson* tiplerini kendi tiplerine cevirmekle yukumlu). MongoDb kutuphanelerinden driverlar vasitasi ile ObjectId vs alabiliyorsun ozel tipler icin.

Boolean en ilkel tiplerden birisi, diline gore true/false ile belirleniyor.

Alisilmis tiplerin disinda "code" (JS program kodu),  regexp (regular expression) gibi tipler de var. Ihtiyac duydugunda arastirilabilecek tipler. Binary data binary olarak saklanabilmesinin ayni sira aramada da kulanilabilir. Array bir baska ilginc tip (MongoDb'de siradan alisildik tiplerden).  Document baska bir tip (kayitlar document, document icinde subdocumentler olabiliyor). minkey, maxkey gibi henuz ne olduklarini tam anlayamadigim tipler de var.  DbRef var (cok nadir kullanilanlardan), tipten cok structure gibi ve bir baska collectiondaki (tablo) dokumanin referansini saklamak icin. Bir de Timestamp tipi var. Bu Date ile alakasiz. 64 bit bir deger, ilk 32 biti saniye cinsinden zamani (unix epochtan -1/1/1970 00:00:00- bu yana) tutuyor. Ikinci 32 bit ise kullanildigi Mongod server instance icindeki artan operasyon sayisini (normalde internal kullanima ait bi tip). Ihtiyacin olursa verilen bir Mongod server instance icin unique bir deger (SQL serverdaki timestamp'e benziyor).

Tipler boyle. Hesap dersen o aslinda basli basina "chapter" da degil "chapter"lar smile Neden dersen SQL serisinde alistigimiz select ... group by otesinde yetenekler var. SQL'de aggregate operator diyoruz ya SUM(), COUNT() vs'ye islemler de aslinda Aggregasyon. SQL serverda bu isler kolay ancak kisitli ve tekduze. Ornegin sayilari toplamak icin sum() kullanabiliyoruz:

Visual Fox Pro
select sum(maxOrdAmt) from customers

sonuc tek bir sayi. Sayilari aggregate ettik ve tek sonuc aldik. Cok guzel, peki ben musterilerin ulkelerinin bir listesini almak isteseydim? O da bir aggregasyon, hepsini "topla" tek bir sonuc getir. Sadece toplama yontemi biraz farkli. Simdi bunu SQL server icin linq ile yapmak mumkun ama genelde pek de kolay bir is degil.

Mumkun oldukca kisa degineyim:
MongoDb'de aggregasyon icin kullanilan 3 yontem var
1) Map-reduce. Map ve reduce ayri ayri fonksiyonlar. Map ile veriyi baska bir forma ceviriyorsun ve grupluyorsun, reduce ile de map edilmis veriden sonuclar aliyorsun. Uzun paragraflarla bile anlatmasi anlasilmasi zor bir konu, tek cumlede anlatabilmis olmayi ummuyorum:) Basitce istedigin datayi baska cursorlara alip sonra da onu scan...endscan ile gecerken sonuc cursorunu doldurmak gibi dusunebilirsin. Icice cok sayida map-reduce yapilabiliyor.

2) Aggregation framework (Mongodb 2.0'dan beri var). Map-reduce ile yapilan isleri daha basit, SQL serverla yaptigimiza benzer ama daha yetenekli bir islem zinciriyle yapmayi saglayan  bir "sistem". Ornek vermekten sakiniyorum, cok basitini versem "e ne var bunda SQL serverda daha kolay" olur, yeteneklisini versem karmasik ve anlasilmaz gelir:) Orta kara birsey de benim su anda aklima gelmedi - bahane mi ne:)

3) Ikisine gerek duyulamyan basit islericin group() metodu.

Ozeti oldukca yetenekli bir "aggregasyon" alt yapisi var. Gelen sonuclar da oyle 2D tablo degil document - yani daha yetenekli yapilar:)