3. MongoDb – Dizi içeren kayıtlarda işlem yapma

Mongodbde dokümanımızın içerisinde istersek dizi ya da embed documan da tutabiliriz. Ancak önceki yazıda kullandığımız CRUD işlem sorgularını embed documanlarda yapısı gereği kullanamayız. Aşağıda örnek bir koleksiyon oluşturulup içerisine dokümanlar insert edilmiştir ve ilerleyen örnekler bu koleksiyon üzerinden verilecektir.

db.players.insert([

    {"ad":"yasin",

    "soyad":"can",

    "Dogum":new Date(2012,08,08),

    "takimlar":["samsunspor","trabzonspor","igdirspor"],

    "altOyuncular":[ 
            {"altİsim":"omer","altSoyisim":"korkmaz"}, 
            {"altİsim":"kuthay","altSoyisim":"gümüs"}, 
   ] 

}])
   $All komutu
  • Bir dizide belli elemanların olup olmadığına göre dökümanları getirmek istersek $All komutunu kullanabiliriz. Bu komutla, koşulda verilen tüm elemanlar dizinin içerisinde yer alıyorsa o dökümanlar getirilir.
   db.players.find( { "takimlar":{     $all:["samsunspor","igdirspor"]    }     })

   $ElemMatch komutu
  • Dizi içerisindeki elemanlar üzerinde sorgulama yapmak için daha komplex koşullar oluşturmak istersek $elemMatchi kullanabiliriz.
       db.players.find("goller":{$elemMatch: {"dakika":{$gte:0}}})
    $Size komutu
  •    Dizinin boyutuna göre doküman sorgulamak istersek $size komutunu kullanabiliriz.  Aşağıdaki sorgu bize koleksiyondaki takimlar dizisi 3 elemanli olan takimlarin dökümanlarını getirmemizi söyler.
       db.players.find({"takimlar":{$size: 3}})


    $Push komutu
  • Döküman içerisindeki herhangi bir diziye eleman eklemek istersek $push komutu işimizi görecektir.
        db.players.update(
                 {"ad":"yasin"}, 
                 {$push: {"takimlar":"yeniEklenecekTakim"}}, 

          )


    $Each komutu
  • Birden fazla elemanı aynı anda eklersek de $push’a ilaveten $each metodunu kullanmamız gerekir.
         db.players.update(

           {"ad":"yasin"}, 
           {$push: {"takimlar":{$each: ["YeniTakim1","YeniTakim2"]}}}, 

         )


    $Slice komutu
  • Dizinin belli bir yerden sonrasını kesip silmek istersek $slice komutunu kullanabiliriz.
        db.players.update(

           {"ad":"yasin"}, 
           {$push:{"takimlar":{$each: [],$slice: 2}}}, 

        )

  
   $Position komutu
  • Bir dizide belli bir indexe eleman eklemek için $position komutunu aşağıdaki gibi kullanmalıyız.
        db.players.update(
           {"ad":"yasin"}, 
           {$push:{"takimlar":{$each: ["0. indexe gelecek takim"], $position: 0}}}, 
     
         )