30 Mayıs 2013 Perşembe

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
     }
  )


Hiç yorum yok:

Yorum Gönder