31 Mayıs 2013 Cuma

MongoDB - Update İşlemleri



update() yöntemi, MongoDB belgelerini değiştirmek için kullanılan birincil yöntemdir. Güncelleme collection da sorgu kriterlere uyan tüm belgeleri güncelleyebilirsiniz.

Kullanımı ise şöyledir:

db.collection.update( <query>, <update>, <options> )

<query> : Sorgu, sql de wWHERE deyimine karşılık gelir. 

<update> : Değişitirilecek kayıtlar, sql de SET deyimine karşılık gelir.


$set ifadesi 

Bir kaydın değerinin güncellenmesi için kullanılır. 

Örnek

> db.example.update (
    { _id : 4 },
    {  $set:
        {
            'age' : 23
        }
    }
)


Update işlemi, belgeye yeni alanlar eklemenizi de sağlar. Yani update işleminde hem istenilen alan güncellenir hem de belgeye yeni alanlar da ekleyebilirsiniz.

Örnek: 

> db.example.update (
    { _id : 4 },
    {  $set:
        {
            'country' : 'Turkey',
            'age' : 25
        }
    }
)


$unset ifadesi 

update(), $unset operatörünü içeriyorsa belgeden alanı kaldırır. Yani bir alanı kaldırmak istiyorsak $unset ifadesini kullanabiliriz. 

Örnek: 

> db.example.update(
    { _id : 4 },
    {  $unset:
        {
            'country' : 'Turkey'
        }
    }
)


Konum belirterek element güncelleme

Güncelleştirme işlemi bir dizi alanında bir elemanın güncelleştirilmesi gerekiyorsa , elemanın konumu kullanılarak güncelleme yapılabilir.

Örnek olarak şöyle bir belge ekleyelim: 

> db.ex.insert (
    {
        _id :1,
        name : { first: 'Aaa', last: 'AAA'},
        age: 23,
        tags : ['JAVA', 'HTML', ' JQUERY', 'CSS'],
        awards: [
            {
                "award" : "Onur Belgesi",
                "year" : 2004,
                "by" : "Lise 2"
            },
            {
                "award" : "Okul Birinciligi",
                "year" : 2006,
                "by" : "Lise 4"
            },
            {
                "award" : "Mezuniyet Derecesi",
                "year" : 2010,
                "by" : "Universite"
            }
        ]
      
    }
)


Şimdi ise tags'daki 'HTML' olan veriyi pozisyon yonetimi ile 'HTML5' olarak güncelleyeceğim. 

> db.ex.update(
    { _id : 1},
    {
    $set :
        {
            'tags.1': 'HTML5'
        }
    }
)

Programlama dilinde arraylarda index 0 dan başladığı için, üstteki örnekte "tags.1" deki 1 index i, "HTML" verisini işaret etmektedir.


Konumu bilinmeyen elementin güncellenmesi 

Eger konumu bilinmiyorsa, pozisyon operatörü ($) kullanılarak güncelleme yapılabilir.  Alanın güncellenmesi için, güncellenecek eleman değerinin sorgu alanında olması gerekiyor.

Örnek

> db.ex.update(
    {
        _id : 1,
        'tags': 'CSS'
    },
    {
    $set :
        {
            'tags.$': 'CSS3'
        }
    }
)



Konumu bilinmeyip aynı hizada olan elementin güncellenmesi

eger güncellenecek bir array içindeyse ve konumu bilinmiyorsa; güncellenecek alan sorguda eklenir, güncellenecek kısmı da belgenin alt alanı ( "awards.$.by" gibi ) yazılarak yeni değer eklenir.

Örnek

> db.ex.update(
    {
        _id : 1,
        'awards.by': 'Lise 4'     // Eski değer
    },
    {
    $set :
        {
            'awards.$.by': 'Lise 3'    // Yeni değer
        }
    }
)

Çoklu döküman güncelleme

update() operatörünün multi özelliği true ya da 1, sorgu sonucunda eşleşen tüm belgeler güncellenir. 

Örnek

db.bios.update(
   { 'awards.award': 'Turing' },
   { $set: { turing: true } },
   { multi: true }
)


30 Mayıs 2013 Perşembe

MongoDB - Koşullu Operatörler


MongoDB ile ilgili koşullu operatörler şunlardır:

(>) Daha büyük - $gt

(<) Daha küçük - $lt

(> =) Büyük eşit - $gte

(<=) Küçük eşit - $lte

(<>) Eşit Değil - $ne


MongoDB $gt 

Karşılaştırılan değerden büyük değerdeki verileri döndürür.

Kullanımı: 

db.testtable.find(
   {
      age: {
          $gt: 23
      }
   }
)


SQL Kullanımı: 

select * from testtable where age > 23;


MongoDB $lt

Karşılaştırılan değerden küçük değerdeki verileri döndürür. 

Kullanımı:

db.testtable.find(
   {
      age: {
          $lt: 23
      }
   }
)


SQL Kullanımı: 

select * from testtable where age < 23;  


MongoDB $gte

Karşılaştırılan değere eşit ve daha büyük değerdeki verileri döndürür.

Kullanımı: 

db.testtable.find(
   {
      age: {
          $gte: 23
      }
   }
)


SQL Kullanımı:

select * from testtable where age >= 23;


MongoDB $lte

Karşılaştırılan değere eşit ve daha küçük değerdeki verileri döndürür.

Kullanımı: 

db.testtable.find(
   {
      age: {
          $lte: 23
      }
   }
)


SQL Kullanımı:

select * from testtable where age <= 23;



MongoDB $ne

Karşılaştırılan değere eşit olmayan verileri döndürür.

Kullanımı: 

db.testtable.find(
   {
      age: {
          $ne: 23
      }
   }
)


SQL Kullanımı:

select * from testtable where age <> 23;


Kaynaklar:
http://www.w3resource.com/mongodb/mongodb-conditional-operators.php




(>) greater than - $gt
(<) less than - $lt
(>=) greater than equal to - $gte
(<= ) less than equal to - $lte
- See more at: http://www.w3resource.com/mongodb/mongodb-conditional-operators.php#sthash.IL3adk7s.dpuf
(>) greater than - $gt
(<) less than - $lt
(>=) greater than equal to - $gte
(<= ) less than equal to - $lte
- See more at: http://www.w3resource.com/mongodb/mongodb-conditional-operators.php#sthash.IL3adk7s.dpuf

MongoDB - Read İşlemleri

Aşağıdaki yöntemlerden birini kullanarak belgeleri okuyabilir, sorgu yapabilirsiniz:

  • find()
  • findOne()

find()

 Bu metod, koleksiyon belgelerini seçmek için birinci yöntemdir. Sözdilimi ise şöyledir:

db.[tablo adı].find(<query>,projection)

- query, sqldeki where gibi, sorgularımızdır. 
- projection, değerleri sonuç kümesinden seçmek için alanların listesine karşılık gelir. 



Örneğin tablo adımız user olsun.

db.user.find() ile user içindeki tüm alanlar listelenir. 

Belge içindeki "_id" alanı 3 olanları listelemek istiyorsak;

> db.user.find(
   {
      _id: 3
   }
)

 

OR (veya) kullanımı

> db.user.find(
   {
      _id: { 

               $in : [ 3, 5 ]
            }
   }
)


"$in" imleci ile koşullardan herhangi birinin geçerli olması durumu için kullanılır. Yani sqldeki or gibi düşünebilirsiniz.  Üstteki örnekte _id değeri 3 ya da 5 olanlar listenecektir.



Between Kullanımı 

 db.collection.find( { field: { $gt: value1, $lt: value2 } } );

- collection: Belge (sqldeki tablo ) adı
- field:  Değişkendir. Örneğin _id, name, age gibi
- $gt: Değerin taban (düşük) değişken adını ifade eder. İsmi sabittir.
- $lt: Değerin tavan (büyük) değişken adını ifade eder. İsmi sabittir.
- value1, value2: taban ve tavan değerlerimiz.

Örnek uygulama:

> db.user.find (
   {
      _id : {
               $gt : 2,
               $lt : 5
            }
   }
)


Üstteki örnekte _id değeri 2 ile 5 arasındaki değerler yani 2 ve 3 listenecektir.


Array ile birden fazla alan sorgulama

Aşağıdaki gibi bir kayıt ekleyelim.

> db.bios.insert ({
  "_id" : 1,
  "name" : {
             "first" : "John",
             "last" :"Backus"
           },
  "birth" : ISODate("1924-12-03T05:00:00Z"),
  "death" : ISODate("2007-03-17T04:00:00Z"),
  "contribs" : [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ],
  "awards" : [
              {
                "award" : "W.W. McDowellAward",
                "year" : 1967,
                "by" : "IEEE Computer Society"
              },
              {
                "award" : "National Medal of Science",
                "year" : 1975,
                "by" : "National Science Foundation"
              },
              {
                "award" : "Turing Award",
                "year" : 1977,
                "by" : "ACM"
              },
              {
                "award" : "Draper Prize",
                "year" : 1993,
                "by" : "National Academy of Engineering"
              }
  ]
})



Örneğin şu şekilde bir arama yaptırabiliriz.


> db.bios.find(
   {
      awards: {
                $elemMatch: {
                     award: 'Turing Award',
                     year: { $gt: 1980 }
                }
      }
   }
)


Buradaki sorguda awards arrayındaki award alanı "Turing Award" ve year alanı 1980 den düşük kayıtlar listenecektir.

Alt Dökümanlar

Sorgulanacak belgenin alanları aynı olmalıdır. Örneği aşağıdaki gibi kayıtlar ekleyelim.

> db.bios.insert(
    {
      name: {
              first: 'Yukihiro',
             aka: 'Matz',
             last: 'Matsumoto'
            }
    }
)

> db.bios.insert(
    {
      name: {
              first: 'Matsumo',
             last: 'Agileto'
            }
    }
)


Aşağıdaki gibi alt döküman sorgusu yapabiliriz.

> db.bios.find(
   {
     'name.first': 'Yukihiro'
   }
)


Burada name alanının altındaki first alanına göre sorgu yapıyoruz. Yani ismi "Yukihiro" olanları listeliyor.



Mantıksal Operatörler

OR operatörü

Kullanımı:

> db.bios.find(
   { $or: [
            { 'name.first' : /^G/ },
            { birth: { $lt: new Date('01/01/1945') } }
          ]
   }
)

Buarada name alanı altındaki first alanının G ile başlayanları ya da 01/01/1945 den büyük olanları listelemektedir.


AND Operatörü 

Kullanımı:

> db.bios.find(
   {
      'name.first': /^K/,
      contribs: 'UNIX'
   }
)
 
first alanının K ile başlaması ve constribs listesinde "UNIX" kaydının bulunması durumunda kayıtları geri döndürür.
 
 

Sonucun Değişkene Aktarılması

var C = db.example.find({_id:1})
 
Burada C değişkeni array özelliğinde olur. Bulunan değerleri görüntülemek için aşağıdaki yolları kullanabilirsiniz:
 
 
1. İndex Değeri
 
Tek bir kayıt görüntülemek için kullanılır. Kullanımı şu şekildedir.
 
DegiskenAdi[index]

Örnek uygulama: 

> C[2] 
 

2. next() Metodu
 
Belirtilen değerden bir sonrakini bulmak için kullanılır. 

Örnek uygulama:

> var document = C.hasNext() ? C.next() : null;
> if(document) {
    var name = document.name;
    print (tojson(name));
}
  

3. forEach() Metodu 
 
Bulunan değerlerin tamamını listeler. 

Örnek uygulama:

> var c = db.example.find(
   {
     _id: {
              $gt:1,
              $lt:6
          }
   }
 )
> c.forEach(printjson)



sort()

Sonuçları sıralamak için sort() idafesi kullanılır.  
 
Kullanımı:

> db.example.find().sort({ name : 1 }); // Normal yani küçükten büyüğe
> db.example.find().sort({ name : -1 }); // Ters yani büyükten küçüğe sıralama
 
 

Limit()

Sorgu sonucudan ilk 50, son 20 kayıt diye bir limit koyabiliriz. Bunu da mongodb de limit() ifadesiyle yapılıyor.
 
Kullanımı 
 
> db.example.find().limit(5) // 5 kaydı göster 
 
 

skip()

Sorgu sonucunda belirli kayıtları göstermemek ya da belirli kayıtları atlayıp, diğer kayıtları görüntülemek isteyebiliriz. Bu işlem de skip() ile yapılıyor.

kullanımı

> db.example.find().skip(3) // sorgu sonucunda ilk 3 kayıt atlanarak diğer kayıtlar listelenir.



findOne()

findOne() tek bir belgeyi (kaydı) seçer. Sorgu sonucunda da bir değişken (imleç)  dönüştürmez.

Kullanımı

db.collection.findOne( <query>, <projection> )


Örnek uygulama

>  db.example.findOne(
     {
             _id: 1
     }
  )


MongoDB - Insert İşlemleri

insert() deyimi, MongoDB  belgesine kayıt eklemek için kullanılır.

db.collection.insert( <document> )

"_id" değeri belgenin anahtar kelimesidir ve benzersiz olmalıdır. Eğer kullanıcı tarafından eklenmediğinde mongodb kendisi ObjectId içerisinde eşsiz olarak ekleyecektir.

Örnek insert kullanımı:

db.bios.insert(
   {
     _id: 1,
     name: { first: 'John', last: 'Backus' },
     birth: new Date('Dec 03, 1924'),
     death: new Date('Mar 17, 2007'),
     contribs: [ 'Fortran', 'ALGOL', 'Backus-Naur Form', 'FP' ],
     awards: [
               {
                 award: 'W.W. McDowell Award',
                 year: 1967,
                 by: 'IEEE Computer Society'
               },
               {
                 award: 'National Medal of Science',
                 year: 1975,
                 by: 'National Science Foundation'
               },
               {
                 award: 'Turing Award',
                 year: 1977,
                 by: 'ACM'
               },
               {
                 award: 'Draper Prize',
                 year: 1993,
                 by: 'National Academy of Engineering'
               }
             ]
   }
)



db.bios.find() ile eklenip eklenmediğini görebiliriz.

Şimdi de objectId olmadan ekleyebiliriz.

db.bios.insert(
   {
     name: { first: 'John', last: 'McCarthy' },
     birth: new Date('Sep 04, 1927'),
     death: new Date('Dec 24, 2011'),
     contribs: [ 'Lisp', 'Artificial Intelligence', 'ALGOL' ],
     awards: [
               {
                 award: 'Turing Award',
                 year: 1971,
                 by: 'ACM'
               },
               {
                 award: 'Kyoto Prize',
                 year: 1988,
                 by: 'Inamori Foundation'
               },
               {
                 award: 'National Medal of Science',
                 year: 1990,
                 by: 'National Science Foundation'
               }
             ]
   }
)

Aşağıdaki query ile de kaydı getirebiliriz.

db.bios.find( { name: { first: 'John', last: 'McCarthy' } } )

save() Metodu ile Ekleme

Eğer eklenecek belge _id alanı içermiyorsa save() metodu ekleme yapar.

Örneğin:

db.bios.save(
   {
        name: { first: 'Guido', last: 'van Rossum'},
        birth: new Date('Jan 31, 1956'),
        contribs: [ 'Python' ],
        awards: [
                  {
                    award: 'Award for the Advancement of Free Software',
                    year: 2001,
                    by: 'Free Software Foundation'
                  },
                  {
                    award: 'NLUUG Award',
                    year: 2003,
                    by: 'NLUUG'
                  }
                ]
   }
)








MongoDB - CRUD İşlemleri

MongoDB ekleme işlemlerinde aşağıdaki özellikleri göz önünde bulundurmak gerekiyor:

  • "_id" alanı otomatik olarak her belgede oluşturulur. Eğer kullanıcı _id değeri tanımlamazsa, MongoDB otomatik bir değer ekler ve bu değer benzersiz bir objectId alanıdır. 
  • Eğer "_id" alanı belirtirseniz bu değer benzersiz olmalıdır. Diğer türlü hata mesajı alırsınız. 
  • Maksimum BSON döküman boyutu 16mb dır.
  • Alan adları "$" ile başlayamaz, "." içeremez.

CRUD işlemlerini 4 e ayırabiliriz:
  1. insert (ekleme),
  2. read (Okuma),
  3. update (güncelleme),
  4. delete (silme)


MongoDB - Temel Komutlar

Merhaba.

- mongo.exe komutu ile mongodb yi çalıştırmıştık.

- db : seçili olan veritabanını görüntüler. Eğer seçilmemişse başlangıç olarak test veritabanı gelir.
- show dbs : Mongodb deki veritabanlarını görüntüler.
- use [veritabanı adı] : işlem yapılacak veritabanı seçilir.
- help : Yardım komutu.


- db.[tablo adı].insert(değişken adı)  komutu ile tabloya kayıt eklenir. sqldeki gibi önce tablo oluşturup, sonra verileri eklememize gerek yok. Verileri insert ile eklerken kendisi veritabanına tabloyu ekliyor.

Örnek kullanımı:
var a = {id:1, name:"ergun", age:23}
db.user.insert(a)

Eklenen kaydı;
db.user.find() ile görüntüleyebiliriz.

find() komutu tablo içinden kayıt aramamızı sağlar. Kullanımı ise şöyledir:

db.[tablo adı].find(<query>,projection)

- query, sqldeki where gibi, sorgularımızdır.
- projection, değerleri sonuç kümesinden seçmek için alanların listesine karşılık gelir.


MongoDB Kurulumu

Merhaba arkadaşlar. Ben mongoDB yi windows 7 üzerinde kuracağım.

İlk önce http://www.mongodb.org/downloads adresinden MongoDB dosyasınını indiriniz.

İndirdiğiniz zip dosyasını çıkartınız ve c:/ sürücünün içine "c:/mongodb/[mongodb dosyaları]" olacak şekilde kopyalayınız.

Verilerinizi tutacağınız bir yol belirlemelisiniz.  Ben c:/mongodb/data olacak şekilde belirledim.

Daha sonra konsolu (cmd) açınız ve;

- C:\mongodb\bin\mongod.exe --dbpath [veri yolu] (c:/mongodb/data gibi)

çalıştırınız. Bu kod ile veri yolumuzu mongodb ye tanıttık.

Yeni bir konsol açıp; C:\mongodb\bin\mongo.exe ile mongodbyi çalıştırmış olup, uygulama oluşturmaya başlayabilirsiniz.