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.
Ş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.
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.
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.
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.
Şimdi yeni kayıtlar ekleyelim ve bu kayıtlar üzerinde sorgular çalıştırmayı görelim.
Şimdi, mevcut kayıtlar içinde, yazarı Altuğ Bilgin Altıntaş olan makaleleri arayalım.
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.
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.
Son olarak bir kaydı nasıl silebileceğimizi de görelim.
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
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.
cs
:~ hakdogan$ mongod
cs
:~ cs$ mongo
> 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
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
> 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)
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 ] }
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ı" }
>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"]})
> 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ı" }
> 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 ] }
> 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 ] }
> 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
Hiç yorum yok:
Yorum Gönder