VERİ TABANI OLUŞTURMA - USE KOMUTU
Sistemde mevcut olmayan bir veritabanını, ilk kez oluşturmak ya da mevcut bir veritabanını kullanmaya başlamak için, use komutu aşağıdaki biçimde kullanılmalıdır;
> use kitabevi
switched to db kitabevi
>
Daha sonra db komutunu girerseniz “kitabevi” veri tabanının adı görüntülenecektir:
> db
kitabevi
>
MongoDB’de default veritabanının adı “test”tir; yeni bir veritabanı oluşturmadığınız takdirde, gireceğiniz bilgiler (döküman, koleksiyon vb) “test” adlı veritabanına eklenecektir.
AKTİF VERİTABANINA DÖKÜMAN EKLEME
Yukarıda oluşturulan “kitabevi” adlı veritabanı içi boş olan bir veritabanıdır. İçine bir döküman eklemek için insert metodunu kullanmak gerekir:
a) Önce kitabevi veritabanına ait bir kayıt bir döküman olarak tanımlanır. Aşağıda bu döküman kayıt adı ile saklanmıştır:
> kayit={"kod":"2343","ad":"malina","yazar":"ingeborg bachmann","yayinevi":"ekin","fiyat":35,"miktar":400}
{
"kod" : "2343",
"ad" : "malina",
"yazar" : "ingeborg bachmann",
"yayinevi" : "ekin",
"fiyat" : 35,
"miktar" : 400
}
kayıt adlı dökümanı kitabevi adlı veritabanına eklemek için aşağıdaki insert komutunu girmeliyiz:
>db.kitap.insert(kayit)
WriteResult({ "nInserted" : 1 })
Böylece döküman başarı ile veritabanına eklenmiştir.
AKTİF DİZİNDE BULUNAN VERİTABANLARININ İSİMLERİNİ LİSTELEMEK
Aktif dizinde bulunan veri tabanlarının isimlerini listelemek için show dbs komutu kullanılır:
> show dbs
admin (empty)
kitabevi 0.078GB
local 0.078GB
test 0.078GB
>
AKTİF VERİ TABANINI SİLMEK
Aktif veritabanını silmek için dropDatabase() metodu kullanılır. Şimdi pers adlı bir veritabanı oluşturalım:
> use pers
switched to db pers
>
Veri tabanına aşağıdaki kayıtı ekleyelim:
> kay = {
"sicil": 2345,
"ad": "ayse okan",
"maas": 3000
}
{
"sicil": 2345,
"ad": "ayse okan",
"maas": 3000
}
kay adlı kaydı insert metodu ile pers adlı veritabanına ekleyebiliriz:
> db.person.insert(kay)
WriteResult({ "nInserted" : 1 })
Kay adlı döküman başarı ile pers adlı veritabanına eklenmiştir. Burada person, pers adlı veritabanı içindeki koleksiyonun adıdır ve döküman bu koleksiyon içine yerleşmektedir.
Find() metodu ile veritabanının içeriğini görüntüleyebiliyoruz:
> db.person.find()
{ "_id" : ObjectId("5404b92cf13cf7fb97cab6f6"),
"sicil" : 2345,
"ad" : "ayse okan",
"maas" : 3000 }
>
Şu anda aktif dizinimizdeki veritabanları:
> show dbs
admin (empty)
kitabevi 0.078GB
local 0.078GB
pers 0.078GB
test 0.078GB
>
Aktif olan veritabanı ise:
> use pers
switched to db pers
pers adlı veritabanı aktif haldedir. Şimdi aşağıdaki komutu girelim:
> db.dropDatabase()
{ "dropped" : "pers",
"ok" : 1 }
Gelen mesaj pers adlı veritabanının silindiğini gösteriyor. Şu anda aktif olan dizindeki veritabanlarını listeleyelim:
> show dbs
admin (empty)
kitabevi 0.078GB
local 0.078GB
test 0.078GB
>
pers adlı veritabanının aktif dizinde mevcut olmadığını görürüz.
VERİTABANI İÇİNDE KOLEKSİYON OLUŞTURMAK
createCollection() METODU
createCollection() metodu ile aktif veri tabanı içinde koleksiyon oluşturmak mümkündür. Metodun yazılış biçimi,
db.createCollection(ad,opsiyonlar)
şeklindedir. Burada ad oluşturulacak koleksiyonun adıdır; opsiyonlar ise kullanımı zorunlu olmayan ve kullanılırsa koleksiyonun biçimini belirleyen bir dökümandır.
ÖRNEK:
> use kitabevi
switched to db kitabevi
kitabevi adlı veritabanını aktif hale getirdik. Şimdi uygulayacağımız createCollection() metodu bu veritabanı üzerinde çalışacaktır:
> db.createCollection("pers")
{ "ok" : 1 }
kitabevi adlı veri tabanı içinde “pers” adlı bir koleksiyon oluşturulmuştur. Şimdi show collections komutu ile aktif veritabanı içindeki koleksiyonları listeleyebiliriz:
> show collections
kitap
pers
system.indexes
>
Daha önceki kitap adlı koleksiyonun yanında “pers” adlı bir koleksiyon da oluşturulmuştur.
Aslında MongoDB’de koleksiyonları ayrı komutla oluşturmak gerekmez. Daha önceki örneklerde gördüğünüz gibi, veritabanına döküman eklenirken koleksiyon da otomatik olarak oluşturulur.
AKTİF VERİTABANINDAN BİR KOLEKSİYONU SİLME - DROP() METODU
Aktif veritabanından bir koleksiyon silmek için drop metodu aşağıdaki biçimde kullanılır:
> db.pers.drop()
true
Böylece o esnada aktif olan kitabevi adlı veri tabanından “pers” adlı koleksiyon silinmiştir. Şimdi aktif veritabanında bulunan koleksiyonları listeleyiniz:
> show collections
kitap
system.indexes
>
“pers”in artık mevcut olmadığını göreceksiniz.
VERİTABANINA DÖKÜMAN EKLEME - INSERT() VE SAVE() METOTLARI
Aktif veri tabanındaki bir koleksiyon içine bir döküman eklemek için insert() metodunun kullanıldığını daha önceki örneklerden biliyorsunuz. Bu metot,
db.koleksiyonadı.insert(dökümanadı)
şeklinde kullanılmaktadır.
Aynı işi gerçekleştirmek için save() metodu da kullanılabilir.
ÖRNEK:
Bu örnekte save() metodunu kullanacağız. Aktif veri tabanı kitabevi olsun ve onun içindeki kitap adlı koleksiyona yeni bir kitap kayıtı eklemek isteyelim:
> kayit={"kod":"2500","ad":"dünün dünyası","yazar":"stefan zweig","yayinevi":"caner","fiyat":40,"miktar":600}
{
"kod" : "2500",
"ad" : "dünün dünyası",
"yazar" : "stefan zweig",
"yayinevi" : "caner",
"fiyat" : 40,
"miktar" : 600
}
Kayıt adlı dökümanı oluşturduktan sonra save() metodunu aşağıdaki biçimde kullanıyoruz:
> db.kitap.save(kayit)
WriteResult({ "nInserted" : 1 })
Şimdi kitabevi içindeki dökümanları find() metodu ile listeleyelim:
> db.kitap.find()
{ "_id" : ObjectId("5404b03ef13cf7fb97cab6f5")
, "kod" : "2343", "ad" : "malina"
, "yazar" : "ingeborg bachmann"
, "yayinevi" : "ekin"
, "fiyat" : 35, "miktar" : 400 }
{ "_id" : ObjectId("5404cc69f13cf7fb97cab6f7"),
"kod" : "2500",
"ad" : "dünün dünyası",
"yazar" : "stefan zweig",
"yayinevi" : "caner", "fiyat" : 40, "miktar" : 600 }
>
Böylece kitabevi veritabanındaki kitap adlı koleksiyonda iki adet dökümanın kaydedilmiş olduğunu göreceksiniz.
AYNI ANDA BİRDEN ÇOK SAYIDA DÖKÜMANI VERİTABANI KOLEKSİYONUNA EKLEMEK
Pratikte çok faydalı ve gerekli bir durum, aynı komutla birden çok dökümanı veritabanı içindeki koleksiyona ekleyebilme imkanıdır. Bunun çözümü basittir; kaydedilecek bilgi bir döküman dizisi şeklinde oluşturularak insert() ya da save() metodu uygulanır.
ÖRNEK:
Aşağıdaki kod içinde iki döküman bir dizi içine yerleştirilmiş ve yyy adı ile atanmıştır:
> yyy=[{"q":45},{"r":67}]
[ { "q" : 45 }, { "r" : 67 } ]
yyy adlı dizi insert komutu ile aktif veritabanı içinde tt adlı bir koleksiyona kaydedilmektedir:
db.tt.insert(yyy)
find() metodu ile tt koleksiyonunu listelerseniz aşağıdaki veriler görüntülenecektir:
db.tt.find()
{ "_id" : ObjectId("540571c7f13cf7fb97cab708"),
"q" : 45 }
{ "_id" : ObjectId("540571c7f13cf7fb97cab709"),
"r" : 67 }
>
VERİTABANINI SORGULAMAK (QUERY)
Veritabanı içindeki bilgileri listelemek için find() ya da pretty() metotlarını kullanabilirsiniz. pretty() metodu ile formatlı çıktı elde etmek mümkündür.
ÖRNEK:
Kitabevi adlı veritabanındaki kitap adlı koleksiyon içindeki bilgileri listelemek istiyoruz. Önce sistemdeki veritabanlarını listeleyelim:
> show dbs
admin (empty)
kitabevi 0.078GB
local 0.078GB
test 0.078GB
yeni 0.078GB
Sonra use komutu ile kitabevini aktif hale getirmeliyiz:
> use kitabevi
switched to db kitabevi
>
Artık find komutu ile kitabevi veritabanındaki kitap adlı koleksiyonun içeriğini listeleyebiliriz:
> db.kitap.find()
{ "_id" : ObjectId("5404b03ef13cf7fb97cab6f5"),
"kod" : "2343",
"ad" : "malina",
"yazar" : "ingeborg bachmann",
"yayinevi" : "ekin",
"fiyat" : 35, "miktar" : 400 }
{ "_id" : ObjectId("5404cc69f13cf7fb97cab6f7"),
"kod" : "2500",
"ad" : "dünün dünyası",
"yazar" : "stefan zweig",
"yayinevi" : "caner",
"fiyat" : 40, "miktar" : 600 }
{ "_id" : ObjectId("5404cfe5f13cf7fb97cab6f8"),
"kod" : "3343", "ad" : "duino ağıtları",
"yazar" : "r.maria rilke ",
"yayinevi" : "uz",
"fiyat" : 25, "miktar" : 300 }
{ "_id" : ObjectId("5404cfe5f13cf7fb97cab6f9"),
"kod" : "3678",
"ad" : "buddenbruck ailesi",
"yazar" : "Thomas mann ",
"yayinevi" : "oka",
"fiyat" : 55,
"miktar" : 200 }
{ "_id" : ObjectId("5404d08af13cf7fb97cab6fa"),
"kod" : "3343",
"ad" : "duino ağıtları",
"yazar" : "r.maria rilke ",
"yayinevi" : "uz",
"fiyat" : 25, "miktar" : 300 }
{ "_id" : ObjectId("5404d08af13cf7fb97cab6fb"),
"kod" : "3678",
"ad" : "buddenbruck ailesi",
"yazar" : "Thomas mann ",
"yayinevi" : "oka", "fiyat" : 55,
"miktar" : 200 }
>
Dokümanlar listelenmiştir ancak pek okunabilir olduğu söylenemez. Daha iyi bir çıktı elde edebilmek için pretty() metodunu kullanabiliriz:
db.kitap.find().pretty()
Böylece aşağıda görüldüğü gibi çok daha kolay okunabilecek bir çıktı elde edebiliriz:
{
"_id" : ObjectId("5404b03ef13cf7fb97cab6f5"),
"kod" : "2343",
"ad" : "malina",
"yazar" : "ingeborg bachmann",
"yayinevi" : "ekin",
"fiyat" : 35,
"miktar" : 400
}
{
"_id" : ObjectId("5404cc69f13cf7fb97cab6f7"),
"kod" : "2500",
"ad" : "dünün dünyası",
"yazar" : "stefan zweig",
"yayinevi" : "caner",
"fiyat" : 40,
"miktar" : 600
}
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f8"),
"kod" : "3343",
"ad" : "duino ağıtları",
"yazar" : "r.maria rilke ",
"yayinevi" : "uz",
"fiyat" : 25,
"miktar" : 300
}
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f9"),
"kod" : "3678",
"ad" : "buddenbruck ailesi",
"yazar" : "Thomas mann ",
"yayinevi" : "oka",
"fiyat" : 55,
"miktar" : 200
}
KOŞULA BAĞLI LİSTELEME - SQL KOMUTLARINDAKİ WHERE SEÇENEĞİNİN MongoDB’DEKİ GERÇEKLEŞTİRİMİ
Bu noktada çok önemli bir konuyu inceleyeceğiz: Koşula bağlı listeleme.
Bunu bilmiyorsak veritabanını etkin kullanamayız. Her seferinde veritabanındaki tüm bilgileri listelemek yerine, (şimdiye kadar öyle yaptık) veritabanı içinden sadece belli koşulları sağlayan verileri listelemek!
Örneğin, fiyatı 50 TL’den pahalı olan kitaplar hangileridir? Ya da Thomas Mann’ın romanları hangileridir? gibi sorulara cevap vermeyi öğreneceğiz.
EŞİTLİK KONTROLÜ
Bu bölümde önce eşitlik kontrolünün nasıl yapılacağını öğreneceğiz. Örnek olarak, “fiyatı 55 TL’ye eşit olan kitapları listeleyiniz” sorusu. Bunun cevabı SQL’de,
SELECT * FROM kitap WHERE fiyat=55;
şeklindedir. MongoDB’de ise eşdeğer komut,
db.kitap.find({"fiyat":55})
şeklindedir. Bu komut ile aşağıdaki çıktı elde edilir:
> db.kitap.find({"fiyat":55})
{ "_id" : ObjectId("5404cfe5f13cf7fb97cab6f9"), "kod" : "3678", "ad" : "buddenbruck ailesi", "yazar" : "Thomas mann ", "yayinevi" : "oka", "fiyat" : 55, "miktar" : 200 }
Aynı komutu pretty() metodu ile uygularsak formatlı ve daha okunabilir bir çıktı elde edeceğiz:
> db.kitap.find({"fiyat":55}).pretty()
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f9"),
"kod" : "3678",
"ad" : "buddenbruck ailesi",
"yazar" : "Thomas mann ",
"yayinevi" : "oka",
"fiyat" : 55,
"miktar" : 200
}
DİĞER KOŞULLARI UYGULAMA: >, <, >=, <=, !=
Doğal olarak eşitlik dışında da mukayese durumları mevcuttur. Aşağıdaki tabloda bunların bir listesi verilmiştir:
AÇIKLAMA |
SQL |
MongoDB |
---|---|---|
Anahtar değerden küçük mü? |
anahtar<değer |
<anahtar>:{$lt:<değer>}} |
Anahtar değerden büyük mü? |
anahtar>değer |
{<anahtar>:{$gt:<değer>}} |
Anahtar değerden küçük ya da eşit mi? |
anahtar<=değer |
{<anahtar>:{$lte:<değer>}} |
Anahtar değerden büyük ya da eşit mi? |
anahtar>=değer |
{<anahtar>:{$gte:<değer>}} |
Anahtar değere eşit değil mi? |
anahtar!=değer |
{<anahtar>:{$ne:<değer>}} |
ÖRNEKLER:
SORU:
Kitap adlı tablodan fiyatı 40 TL ve daha az olan kitapları listeleyiniz.
ÇÖZÜM:
> db.kitap.find({"fiyat":{$lte:40}}).pretty()
{
"_id" : ObjectId("5404b03ef13cf7fb97cab6f5"),
"kod" : "2343",
"ad" : "malina",
"yazar" : "ingeborg bachmann",
"yayinevi" : "ekin",
"fiyat" : 35,
"miktar" : 400
}
{
"_id" : ObjectId("5404cc69f13cf7fb97cab6f7"),
"kod" : "2500",
"ad" : "dünün dünyası",
"yazar" : "stefan zweig",
"yayinevi" : "caner",
"fiyat" : 40,
"miktar" : 600
}
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f8"),
"kod" : "3343",
"ad" : "duino ağıtları",
"yazar" : "r.maria rilke ",
"yayinevi" : "uz",
"fiyat" : 25,
"miktar" : 300
}
SORU:
Kitap adlı koleksiyondan fiyatı 50 TL ve daha fazla olan kitapları listeleyiniz.
ÇÖZÜM:
> db.kitap.find({"fiyat":{$gte:50}}).pretty()
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f9"),
"kod" : "3678",
"ad" : "buddenbruck ailesi",
"yazar" : "Thomas mann ",
"yayinevi" : "oka",
"fiyat" : 55,
"miktar" : 200
}
SORU:
Kitap adlı koleksiyondan yazarı “Stefan Zweig” olmayan kitapları listeleyiniz.
ÇÖZÜM:
> db.kitap.find({"yazar":{$ne:"stefan zweig"}}).pretty()
{
"_id" : ObjectId("5404b03ef13cf7fb97cab6f5"),
"kod" : "2343",
"ad" : "malina",
"yazar" : "ingeborg bachmann",
"yayinevi" : "ekin",
"fiyat" : 35,
"miktar" : 400
}
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f8"),
"kod" : "3343",
"ad" : "duino ağıtları",
"yazar" : "r.maria rilke ",
"yayinevi" : "uz",
"fiyat" : 25,
"miktar" : 300
}
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f9"),
"kod" : "3678",
"ad" : "buddenbruck ailesi",
"yazar" : "Thomas mann ",
"yayinevi" : "oka",
"fiyat" : 55,
"miktar" : 200
}
BİLEŞİK KOŞULLAR : AND VE OR AND OPERATÖRÜ
{$and:[koşul1,koşul2,….koşuln ]}
şeklinde kullanılır. AND’in işlevini aşağıdaki tablo ile hatırlatalım:
Koşul1 |
Koşul2 |
Koşul1 AND koşul2 |
---|---|---|
True(doğru) |
True(doğru) |
True(doğru) |
True(doğru) |
False(yanlış) |
False(yanlış) |
False(Yanlış) |
True(doğru) |
False(yanlış) |
False(Yanlış) |
False(yanlış) |
False(yanlış) |
ÖRNEK:
Fiyatı 30 TL’den fazla ve 55 TL’den az olan kitapları listeleyiniz.
ÇÖZÜM:
Bu sorunun cevabını aşağıdaki gibi bir ifade ile alabiliriz:
{$and:[{"fiyat":{$lt:55}}
,{"fiyat":{$gt:30}}]}
Aşağıda gerekli komut ve çıktısı görülmektedir:
> db.kitap.find({$and:[{"fiyat":{$lt:55}},
{"fiyat":{$gt:30}}]}).pretty()
{
"_id" : ObjectId("5404b03ef13cf7fb97cab6f5"),
"kod" : "2343",
"ad" : "malina",
"yazar" : "ingeborg bachmann",
"yayinevi" : "ekin",
"fiyat" : 35,
"miktar" : 400
}
{
"_id" : ObjectId("5404cc69f13cf7fb97cab6f7"),
"kod" : "2500",
"ad" : "dünün dünyası",
"yazar" : "stefan zweig",
"yayinevi" : "caner",
"fiyat" : 40,
"miktar" : 600
}
>
OR OPERATÖRÜ
OR operatörü iki koşulu bağlarken, sadece biri doğru ise sonuç doğru sadece her iki koşul da yanlış ise sonuç yanlıştır. Aşağıdaki tabloda olası durumlar verilmiştir:
Koşul1 |
Koşul2 |
Koşul1 OR koşul2 |
---|---|---|
True(doğru) |
True(doğru) |
True(doğru) |
True(doğru) |
False(yanlış) |
True(doğru) |
False(Yanlış) |
True(doğru) |
True(doğru) |
False(Yanlış) |
False(yanlış) |
False(yanlış) |
ÖRNEK:
Fiyatı 30 TL’den fazla veya yazarı “Stefan Zweig” olan kitapları listeleyiniz.
ÇÖZÜM:
> db.kitap.find({$or:[{"yazar":"stefan zweig"},{"fiyat":{$gt:30}}]}).pretty()
{
"_id" : ObjectId("5404b03ef13cf7fb97cab6f5"),
"kod" : "2343",
"ad" : "malina",
"yazar" : "ingeborg bachmann",
"yayinevi" : "ekin",
"fiyat" : 35,
"miktar" : 400
}
{
"_id" : ObjectId("5404cc69f13cf7fb97cab6f7"),
"kod" : "2500",
"ad" : "dünün dünyası",
"yazar" : "stefan zweig",
"yayinevi" : "caner",
"fiyat" : 40,
"miktar" : 600
}
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f9"),
"kod" : "3678",
"ad" : "buddenbruck ailesi",
"yazar" : "Thomas mann ",
"yayinevi" : "oka",
"fiyat" : 55,
"miktar" : 200
}
GÜNCELLEME İŞLEMİ - UPDATE() METODU
update() metodu ile veritabanı içinde güncelleme işlemleri gerçekleştirilebilir. update() metodunun kullanılış biçimi aşağıdaki gibidir:
update(Seçim kriteri ya da koşul, Güncel veri)
ÖRNEK:
“kitap” adlı koleksiyon içindeki kitaplardan “Ingeborg Bachmann”ın kitaplarının fiyatlarını 65 TL olarak değiştiren bir MongoDB komutu yazınız.
ÇÖZÜM:
> db.kitap.update({"yazar":"ingeborg bachmann"}
,{$set:{'fiyat':65}})
WriteResult({ "nMatched" : 1,
"nUpserted" : 0,
"nModified" : 1 })
Sonucu kontrol edersek,
db.kitap.find()
{ "_id" : ObjectId("5404b03ef13cf7fb97cab6f5"),
"kod" : "2343",
"ad" : "malina",
"yazar" : "ingeborg bachmann",
"yayinevi" : "ekin",
"fiyat" : 65,
"miktar" : 400 }
Ingeborg Bachmann’ın kitaplarının (burada tek kitap) fiyatının 65 TL olarak değiştirildiğini görürüz.
GÜNCELLEME İŞLEMİ - SAVE() METODU
save() metodu, eski dökümanı güncellenmiş yenisi ile değiştirir. Kullanılış biçimi,
db.KoleksiyonAdı(-id:ObjectID(),YENİ_VERİ)
şeklindedir.
ÖRNEK:
Aşağıdaki koleksiyonu tablo adı ile urun adlı veritabanı içinde oluşturmak istiyoruz:
id |
ur |
miktar |
---|---|---|
110 |
conta |
200 |
120 |
civata |
300 |
150 |
Vida |
Vida |
Aşağıdaki komutları sıra ile giriniz:
> use urun
switched to db urun
> db.tablo.save({_id:110,ur:"conta"
,miktar:200})
WriteResult({ "nMatched" : 1,
"nUpserted" : 0,
"nModified" : 1 })
> db.tablo.save({_id:120,ur:"civata",
miktar:300})
WriteResult({ "nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : 120 })
> db.tablo.save({_id:150,ur:"vida",
miktar:500})
WriteResult({ "nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : 150 })
• db.tablo.find().pretty()
Böylece tablo adlı koleksiyon istediğimiz gibi oluşturulmuştur:
{ "_id" : 110,
"ur" : "conta",
"miktar" : 200 }
{ "_id" : 120,
"ur" : "civata",
"miktar" : 300 }
{ "_id" : 150,
"ur" : "vida",
"miktar" : 500 }
Şimdi _id’si 150 olan ürünün miktarını 458 olarak değiştirmek (güncellemek) istiyoruz. Aşağıdaki save() metodunu kullanabiliriz:
> db.tablo.save({_id:150,ur:"vida"
,miktar:458})
WriteResult({ "nMatched" : 1,
"nUpserted" : 0,
"nModified" : 1
})
Şimdi tablonun son durumunu listeleyelim:
db.tablo.find().pretty()
{ "_id" : 110,
"ur" : "conta",
"miktar" : 200 }
{ "_id" : 120,
"ur" : "civata",
"miktar" : 300 }
{ "_id" : 150,
"ur" : "vida",
"miktar" : 458 }
>
Çıktı listesinde gördüğünüz gibi güncelleme başarı ile gerçekleştirilmiştir.
VERİTABANINDAN DÖKÜMAN SİLME - DELETE() KOMUTU
remove() metodu aktif koleksiyon içinden döküman silmek için kullanılır. remove() metodunun iki parametresi vardır:
I. Silme kriteri:Veri tabanına hangi tür kayıtların silinmek istendiğini anlatan koşul ifadeleridir.
II. İkinci parametrenin kullanımı isteğe bağlıdır. Değeri true ya da 1 ise sadece 1 tane kayıt silinir.
ÖRNEK:
Kitap adlı koleksiyon içinden fiyatı 50 TL’den fazla olan kitapları siliniz!
ÇÖZÜM:
> use kitabevi
switched to db kitabevi
kitabevi veritabanını aktif hale getirdik. Şimdi kitap adlı koleksiyonda o anda bulunan kitapları listeleyelim:
> db.kitap.find().pretty()
{
"_id" : ObjectId("5404b03ef13cf7fb97cab6f5"),
"kod" : "2343",
"ad" : "malina",
"yazar" : "ingeborg bachmann",
"yayinevi" : "ekin",
"fiyat" : 65,
"miktar" : 400
}
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f8"),
"kod" : "3343",
"ad" : "duino ağıtları",
"yazar" : "r.maria rilke ",
"yayinevi" : "uz",
"fiyat" : 25,
"miktar" : 300
}
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f9"),
"kod" : "3678",
"ad" : "buddenbruck ailesi",
"yazar" : "Thomas mann ",
"yayinevi" : "oka",
"fiyat" : 55,
"miktar" : 200
}
Böylece 3 tane kitap listelenmiştir. Şimdi 50 TL’den pahalı olan kitapları silmek için aşağıdaki komutu girmeliyiz:
> db.kitap.remove({"fiyat":{$gt:50}})
WriteResult({ "nRemoved" : 4 })
Şimdi kitap adlı koleksiyonun son içeriğini görebilmek için kitapları listeleyelim:
> db.kitap.find().pretty()
{
"_id" : ObjectId("5404cfe5f13cf7fb97cab6f8"),
"kod" : "3343",
"ad" : "duino ağıtları",
"yazar" : "r.maria rilke ",
"yayinevi" : "uz",
"fiyat" : 25,
"miktar" : 300
}
Kolayca görüldüğü gibi, fiyatı 50 TL’den fazla olan kitaplar kitap adlı koleksiyondan silinmiş ve koleksiyonda sadece 1 kitap kalmıştır.
Yukardaki remove() komutunu aşağıdaki gibi girseydik kitap adlı koleksiyondan, koşulu sağlayan sadece bir kitap silinecekti:
db.kitap.remove({"fiyat":{$gt:50}},1)
KOLEKSİYONDAKİ TÜM DÖKÜMANLARI SİLMEK
remove() komutu koşulsuz olarak kullanılırsa aktif koleksiyon içindeki tüm dökümanlar silinecektir.
ÖRNEK:
urun adlı veritabanından tablo adlı koleksiyonu siliniz.
ÇÖZÜM:
urun aktif hale getirilmelidir:
> use urun
switched to db urun
urun içindeki koleksiyonları listeliyoruz:
show collections
system.indexes
tablo
İki adet koleksiyon içinden tabloyu sileceğiz. Önce tablonun içeriğini listeliyoruz:
> db.tablo.find().pretty()
{ "_id" : 110, "ur" : "conta", "miktar" : 200 }
{ "_id" : 120, "ur" : "civata", "miktar" : 300 }
{ "_id" : 150, "ur" : "vida", "miktar" : 458 }
Şimdi remove() komutunu koşulsuz kullanıyoruz. Ayrıca ikinci parametreyi 0 yapıyoruz:
> db.tablo.remove("",0)
WriteResult({ "nRemoved" : 3 })
System 3 kayıtın silindiğini söylüyor. tablo’nun içeriğini gene listeleyelim:
> db.tablo.find().pretty()
>
Böylece tablo’nun boş olduğunu yani bütün kayıtların silinmiş olduğunu görürüz.
PROJEKSİYON İŞLEMİ
Projeksiyon işlemi deyince şunu anlıyoruz: koleksiyonun tüm anahtar/değer ikililerini listelemek yerine sadece ilgi duyulan ya da o anda gerekli olanları listelemek!
Bu işlemi find() metodunu özel bir biçimde kullanarak gerçekleştirebiliriz.
ÖRNEK:
Aşağıdaki adımlar ile urun adlı bir veri tabanı ve içinde tx adlı bir koleksiyon oluşturalım:
> use urun
switched to db urun
> db.tx.insert({"a":300,"b":67,"c":456,"d":800,"e":89})
WriteResult({ "nInserted" : 1 })
> db.tx.insert({"a":30,"b":65,"c":416,"d":807,"e":189})
WriteResult({ "nInserted" : 1 })
> db.tx.insert({"a":230,"b":765,"c":4316,"d":807,"e":789})
WriteResult({ "nInserted" : 1 })
> db.tx.find()
{ "_id" : ObjectId("5406280df13cf7fb97cab70d"), "a" : 300, "b" : 67, "c" : 456, "d" : 800, "e" : 89 }
{ "_id" : ObjectId("54062834f13cf7fb97cab70e"), "a" : 30, "b" : 65, "c" : 416, "d" : 807, "e" : 189 }
{ "_id" : ObjectId("5406285bf13cf7fb97cab70f"), "a" : 230, "b" : 765, "c" : 4316, "d" : 807, "e" : 789 }
> db.tx.find().pretty()
{
"_id" : ObjectId("5406280df13cf7fb97cab70d"),
"a" : 300,
"b" : 67,
"c" : 456,
"d" : 800,
"e" : 89
}
{
"_id" : ObjectId("54062834f13cf7fb97cab70e"),
"a" : 30,
"b" : 65,
"c" : 416,
"d" : 807,
"e" : 189
}
{
"_id" : ObjectId("5406285bf13cf7fb97cab70f"),
"a" : 230,
"b" : 765,
"c" : 4316,
"d" : 807,
"e" : 789
}
Şimdi tx koleksiyonundan sadece “a” ve “e” anahtarları ile ilişkili verileri listelemek isteyelim. Aşağıdaki komutu girmeliyiz:
db.tx.find({},{"a":1,"e":1}).pretty()
{ "_id" : ObjectId("5406280df13cf7fb97cab70d"), "a" : 300, "e" : 89 }
{ "_id" : ObjectId("54062834f13cf7fb97cab70e"), "a" : 30, "e" : 189 }
{ "_id" : ObjectId("5406285bf13cf7fb97cab70f"), "a" : 230, "e" : 789 }
>
LİSTELENECEK DÖKÜMAN SAYISINI SINIRLAMAK - LIMIT() METODU
Aktif veritabanındaki tablodan listelenecek dökümanların sayısını bazı durumlarda sınırlamak gerekli olabilir. Bu amaçla find() metodu ile birlikte limit() metodu kullanılabilir.
db.tx.find().limit(2)
{ "_id" : ObjectId("5406280df13cf7fb97cab70d"), "a" : 300, "b" : 67, "c" : 456, "d" : 800, "e" : 89 }
{ "_id" : ObjectId("54062834f13cf7fb97cab70e"), "a" : 30, "b" : 65, "c" : 416, "d" : 807, "e" : 189 }
>
Burada tx koleksiyonunda 3 döküman olmasına rağmen limit metodu ile listelenecek döküman sayısı 2 olarak sınırlanmaktadır.
SKIP() METODU
skip() metodu ile dökümanların belirli bir miktarının atlanması da sağlanabilir. Aşağıdaki komutta, 10 döküman atlanarak daha sonraki 2 döküman listelenmektedir:
db.tx.find().limit(2).skip(10)
{ "_id" : ObjectId("54062834f13cf7fb97cab70e"), "a" : 30, "b" : 65, "c" : 416, "d" : 807, "e" : 189 }
{ "_id" : ObjectId("5406285bf13cf7fb97cab70f"), "a" : 230, "b" : 765, "c" : 4316, "d" : 807, "e" : 789 }
>
Bu sayede veritabanındaki dokümanlar üzerinde sayfalama (paging) işlemi gerçekleştirebiliriz.