NoSQL kavramı hakkında farkındalık oluşturup, popüler NoSQL çözümü MongoDB’yi size tanıtmayı amaçlayan
makalede belirttiğim gibi, MongoDB dokümanyasyonu, kullandığınız platforma(Linux, Mac os x, Windows) MongoDB’yi
nasıl kurabileceğinize dair yeterli bilgiyi sunmaktadır.
Kurulumu başarıyla tamamladıysak, artık teoriden pratiğe geçip, çekirdek MongoDB işlemlerini(
CRUD operasyonları) gerçekleştirerek ilk kayıtlarımızı oluşturabiliriz.
Konsol
MongoDB, yönetimi için her türlü yeterliliğe sahip konsol uygulaması
ile sisteminize kuruluyor. MongoDB yönetim için görsel bir araç
barındırmamakla birlikte, bu iş için
üçüncü parti çözümler bulunmaktadır.
Konsol yönetimi için öncelikle,
birincil arka plan kabuğunu çalıştırmamız gerekiyor.
Bu komutla MongoDB için arka planda veri isteklerini işleyecek kabuğu
çalıştırdıktan sonra, yeni bir konsol ekranında, sistem yöneticilerinin
veritabanları üzerinde sorgu, crud ve diğer operasyonları
gerçekleştirebilmesi adına tasarlanmış
mongo JavaScript kabuğunu çalıştırmalıyız.
Tam bu noktada, yeni başlayanlar için help komutu ile yardım almak,
hangi komutla ne tür operasyonların gerçekleştirildiğini görmek faydalı
olacaktır.
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use db_name set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
İlk olarak kurulumla birlikte gelen, varolan veritabanlarının listesine bakalım.
> show dbs
local 0.078125GB
Şimdi bir kullanım senaryosu belirleyelim ve ardından da, crud
operasyonlarını gerçekleştireceğimiz collection’ları barındıracak
veritabanımızı oluşturalım.
Senaryomuz
Kodcu.com’da yayınlanan makaleleri kategori, başlık, içerik, tarih, yazar, etiket alanlarına sahip dokümanlar(
unutmayın, MongoDB’de her kayıt, aslında bir dokümandır) olarak saklamak, bu dokümanların alanları üzerinde sorgulama, güncelleme ve silme işlemlerini gerçekleştirmek.
> use kodcu
switched to db kodcu
MongoDB’de, alışageldiğimiz sql veritabanlarında var olana benzer,
veritabanı oluşturmak için bir create komutu bulunmuyor. Böyle bir şeye
gerek de yok,
çünkü MongoDB create işlemini, tanımladığınız veritabanına kayıt eklediğiniz anda gerçekleştiriyor. Yukarıda yer alan
use kodcu
komutu ile biz, veritabanı tanımlama işlemini gerçekleştirmiş olduk.
Çıktıdan anlaşılabileceği gibi, use komutu ile varolan veritabanları
arasında seçim de yapabiliyoruz.
> article = {
category: ["Yazılar"],
title: "Lean Kanban Atölye Çalışması",
content: "Kanban sistemi son 10 yıldır yazılım yönetimi alanında etkiliyici bir yaklaşımdır.",
date: new Date('2013-04-11'),
author: "Altuğ Bilgin Altıntaş",
tags: [null]}
{
"category" : ["Yazılar"],
"title" : "Lean Kanban Atölye Çalışması",
"content" : "Kanban sistemi son 10 yıldır yazılım yönetimi alanında etkiliyici bir yaklaşımdır.",
"date" : ISODate("2013-04-11T00:00:00Z"),
"author" : "Altuğ Bilgin Altıntaş",
"tags" : [null]
}
> db.articles.save(article)
db.articles.save(article) komutuyla, kodcu veritabanı içinde
articles collection‘ını(
önceki makalede belirtildiği gibi, MongoDB’de collection‘lar, sql dünyasında tablolara tekabül etmektedir) oluşturduk ve öncesinde
tanımladığımız article objesini bu collection’a ekledik. Böylelikle MongoDB’ye ilk kaydımızı(doküman) eklemiş olduk.
Aşağıdaki komutla da aynı sonucu elde ederiz.
db.articles.insert({
category: [“Yazılar”],
title: "Lean Kanban Atölye Çalışması",
content: "Kanban sistemi son 10 yıldır yazılım yönetimi alanında etkiliyici bir yaklaşımdır.",
date: new Date('2013-04-11'),
author: "Altuğ Bilgin Altıntaş",
tags: [null]})
> show dbs
kodcu 0.203125GB
local 0.078125GB
> show collections
articles
system.indexes
> db.articles.find()
{ "_id" : ObjectId("516a93d0b26184f91a8b985c"),
"category" : [ "Yazılar" ],
"title" : "Lean Kanban Atölye Çalışması",
"content" : "Kanban sistemi son 10 yıldır yazılım yönetimi alanında etkiliyici bir yaklaşımdır.",
"date" : ISODate("2013-04-11T00:00:00Z"),
"author" : "Altuğ Bilgin Altıntaş",
"tags" : [ null ]
}
Görüldüğü üzre, kodcu isminde veritabanımız, bu veritabanı içinde de
articles isminde bir collection oluşmuş durumda. Collection üzerinde
yapılan
find() çağrısıyla da, ilgili collection’ın
barındırdığı kayıtları çıktılamış olduk. Bu kayıtta bizim manuel
girmediğimiz bir değer dikkatinizi çekmiş olmalı,
id değeri.
MongoDB’de her bir dokümanın benzersiz/unique bir kimlik alanı vardır. Bu alan
_id alanıdır. _id alanına manuel olarak değer atanmadığı takdirde, MongoDB bu alana
ObjectId tipinde benzersiz bir kimlik değeri atamaktadır.
Oluşturduğumuz ilk kayıtta tags alanına null değer girdik, bu alanı güncelleyelim.
> db.articles.update({_id:ObjectId("516a93d0b26184f91a8b985c")},
{$set: {"tags": ["lean","kanban","eğitim"]}})
> db.articles.find()
{ "_id" : ObjectId("516a93d0b26184f91a8b985c"),
"author" : "Altuğ Bilgin Altıntaş",
"category" : [ "Yazılar" ],
"content" : "Kanban sistemi son 10 yıldır yazılım yönetimi alanında etkiliyici bir yaklaşımdır.",
"date" : ISODate("2013-04-11T00:00:00Z"),
"tags" : [ "lean", "kanban", "eğitim" ],
"title" : "Lean Kanban Atölye Çalışması"
}
Şimdi yeni kayıtlar ekleyelim ve bu kayıtlar üzerinde sorgular çalıştırmayı görelim.
>db.articles.insert({
category: ["Yazılar"],
title: "Backbone.js ile ipleri elinize alın! – Ücretsiz Webiner",
content: "Backbone.js, karmaşaya boğulmuş JavaScript kodunuzu bir yapı içerisine sokan ve geliştirimi zevkli bir ortam sunan bir JavaScript kütüphanesidir.",
date: new Date('2013-04-10'),
author: "Kodcu.Com",
tags: [null]})
>db.articles.insert({
category: ["Java", "Tutorial", "Yazılar", "Yazılım"],
title: "Java ile Apache Solr’a Veri İndeksleme",
content: "Merhabalar, bir önceki yazımda Apache Solr kurulumundan, konfigürasyonundan, komut satırından Solr’a veri indeksleme ve bu veriler üzerinden sorgu yapabilme işlemlerinden bahsetmiştim.",
date: new Date('2013-04-09'),
author: "Cüneyt Yeşilkaya",
tags: ["java", "java ile solr'a veri indekslemek", "solr", "solrj"]})
>db.articles.insert({
category: ["NoSQL", "Yazılar"],
title: "Çekirdek MongoDB İşlemleri",
content: "NoSQL kavramı hakkında farkındalık oluşturup...",
date: new Date('2013-04-15'),
author: "Hüseyin Akdoğan",
tags: ["mongodb", "nosql"]})
Şimdi, mevcut kayıtlar içinde, yazarı Altuğ Bilgin Altıntaş olan makaleleri arayalım.
> db.articles.find({author: "Altuğ Bilgin Altıntaş"})
{ "_id" : ObjectId("516a93d0b26184f91a8b985c"),
"author" : "Altuğ Bilgin Altıntaş",
"category" : [ "Yazılar" ],
"content" : "Kanban sistemi son 10 yıldır yazılım yönetimi alanında etkiliyici bir yaklaşımdır.",
"date" : ISODate("2013-04-11T00:00:00Z"),
"tags" : [ "lean", "kanban", "eğitim" ],
"title" : "Lean Kanban Atölye Çalışması"
}
Burada daha önce MongoDB’yi diğer NoSQL çözümlerden ayıran ve öne
çıkaran hususlardan birisi olarak bahsettiğim, istenilen alana göre
sorgulama yapabilme olanağını görmüş olduk. Yine aynı başlık altında
belirttiğim gibi, MongoDB kullanıcılarına, sorgularda düzenli
ifadelerden(
regular expression) yararlanma olanağı da sunuyor. Bu bağlamda, içeriğinde
Backbone ve
JavaScript ifadeleri yer alan makaleleri bulmak istediğimizde şöyle bir söz dizimi kullanıyoruz.
> db.articles.find({content: {$regex: 'Backbone.*JavaScript'}})
{ "_id" : ObjectId("516a9432b26184f91a8b985d"),
"category" : [ "Yazılar" ],
"title" : "Backbone.js ile ipleri elinize alın! – Ücretsiz Webiner",
"content" : "Backbone.js, karmaşaya boğulmuş JavaScript kodunuzu bir yapı içerisine sokan ve geliştirimi zevkli bir ortam sunan bir JavaScript kütüphanesidir.",
"date" : ISODate("2013-04-10T00:00:00Z"),
"author" : "Kodcu.Com",
"tags" : [ null ]
}
MongoDB,
düzenli ifadeleri
kullanırken yararlanabileceğiniz oldukça yararlı 4 seçenek sunuyor.
Bunlardan biri, büyük/küçük harf duyarsız sorgular için kullanılıyor.
> db.articles.find({content: {$regex: 'backbone.*javascript', $options: 'i'}})
{ "_id" : ObjectId("516a9432b26184f91a8b985d"),
"category" : [ "Yazılar" ],
"title" : "Backbone.js ile ipleri elinize alın! – Ücretsiz Webiner",
"content" : "Backbone.js, karmaşaya boğulmuş JavaScript kodunuzu bir yapı içerisine sokan ve geliştirimi zevkli bir ortam sunan bir JavaScript kütüphanesidir.",
"date" : ISODate("2013-04-10T00:00:00Z"),
"author" : "Kodcu.Com",
"tags" : [ null ]
}
Son olarak bir kaydı nasıl silebileceğimizi de görelim.
> db.articles.find()
{ "_id" : ObjectId("516a93d0b26184f91a8b985c"),
"author" : "Altuğ Bilgin Altıntaş",
"category" : [ "Yazılar" ],
"content" : "Kanban sistemi son 10 yıldır yazılım yönetimi alanında etkiliyici bir yaklaşımdır.",
"date" : ISODate("2013-04-11T00:00:00Z"),
"tags" : [ "lean", "kanban", "eğitim" ],
"title" : "Lean Kanban Atölye Çalışması"
}
{ "_id" : ObjectId("516a9432b26184f91a8b985d"),
"category" : [ "Yazılar" ],
"title" : "Backbone.js ile ipleri elinize alın! – Ücretsiz Webiner",
"content" : "Backbone.js, karmaşaya boğulmuş JavaScript kodunuzu bir yapı içerisine sokan ve geliştirimi zevkli bir ortam sunan bir JavaScript kütüphanesidir.",
"date" : ISODate("2013-04-10T00:00:00Z"),
"author" : "Kodcu.Com",
"tags" : [ null ]
}
{ "_id" : ObjectId("516a943bb26184f91a8b985e"),
"category" : [ "Java", "Tutorial", "Yazılar", "Yazılım" ],
"title" : "Java ile Apache Solr’a Veri İndeksleme",
"content" : "Merhabalar, bir önceki yazımda Apache Solr kurulumundan, konfigürasyonundan, komut satırından Solr’a veri indeksleme ve bu veriler üzerinden sorgu yapabilme işlemlerinden bahsetmiştim.",
"date" : ISODate("2013-04-09T00:00:00Z"),
"author" : "Cüneyt Yeşilkaya",
"tags" : [ "java", "java ile solr'a veri indekslemek", "solr", "solrj" ]
}
{ "_id" : ObjectId("516a9444b26184f91a8b985f"),
"category" : [ "NoSQL", "Yazılar" ],
"title" : "Çekirdek MongoDB İşlemleri",
"content" : "NoSQL kavramı hakkında farkındalık oluşturup...",
"date" : ISODate("2013-04-15T00:00:00Z"),
"author" : "Hüseyin Akdoğan",
"tags" : [ "mongodb", "nosql" ]
}
Burada ele alıp, konsol uygulaması üzerinden gerçekleştirdiğimiz
işlemleri, MongoDB’nin sürücü desteğinde bulunduğu yazılım dilleriyle
gerçekleştirmek de mümkün. Nasip olursa bir sonraki makalede,
MongoDB’nin sağladığı native java driver ile burada gördüğümüze benzer
işlemlerin nasıl gerçekleştirilebileceğini ele alacağız.
twitter/@yasinaktimur