3 Ocak 2016 Pazar

Geodjango tutorials by using postgreSQL, Postgis,Proj4, Geos

                                     Geodjango


Learn how to create location based applicatons like swarm, foursquare or tinder.

We can add anything onto our standard databases and then search up queries like listing them in a particular chronological order or for instance, showing people who has a name starting with the letter a. But have you ever thought about how we save a particular location, more precisely, their latitude and longitude information by using queries? What about listing these queries from the nearest to the most far, most far to the nearest and everything else like searching up within a particular kilometer?
If the subject is location, we also need to learn how to use other data types as well as customary databases like pointfield or polygonfield.
What is a PointField?
Simply put, it is a type of data that we use to save the coordinates (latitude and longitude) of the users.
What is a PolygonField?
This is the type of data that you would need to use if you want to plot a particular area instead of just plotting a point on the map. Examples include: land, patch of an area, country, city, the area of a house etc.
Where can I use PointField? Where would it benefit me?
For example, when you check-in using the swarm app, the app will receive your latitude and logitude information where you have checked in at that moment. This information will be sent to their server and will be saved into the pointfield after being transformed into a point. Then your location will be shared with everyone instantly.
What else does Swarm do?
For example, when you are checking in, it comes up with some suggestions. For example, if you are eating in London in Burger King, and you have a Starbucks nearby, it will be suggested to you.
Here is an example of what the suggestions may look like:
  1. Burger King
  2. Starbucks
  3. London
  4. Others...
... but how does swarm know that you are near these places?
Because these are actually saved into the database of Swarm as a pointfield. So it's listing these localities from the closest to the most far. After you have learnt from these lectures, you will find it's really easy make such filters.
Additionally, you will also learn how to add limitations within a chosen quantity of kilometer . So you could request to show people for instance only within 10km in distance and list those from the nearest to the farthest.
Let's talk a bit about Tinder.
What does Tinder do? It shows you the nearest opposite sex. If you are not interested in the users nearby, it will show you someone else that is farther and the distance will gradually become higher. For example, if you are not interested in the people within 0.3km away, the distance will gradually increase to like 2km, 5km, 10km but for example if you are using Tinder in Turkey, you obviously won't see people who are in Germany.
Basically, Tinder saves your location into their pointfield and lists people who are the nearest to the farthest to your location.
Tinder also shows your distance to other users.
With these lectures, you will also learn these and how to calculate the distance in between two users using km's or miles.
Congratulations, you can now create apps such as swarm, tinder or foursquare.
So what else can we do?
Find my friends: you can make an app where you can find all your friends over a map.
You can create a special app where people can follow their girlfriends over a map.
You can create an app for rent a car type of businesses to follow the location of the vehicle.
For example, you can create an app for an employer who has a business that is usually done outside by an employee like working as a taxi driver. Usually, you would need an expensive GPS device for such things but you can simply make them download an app for their mobile phone and constantly watch their current location.
Not only these.
If you have a website about selling property (real estate) and instead of writing just the km2 of the house, you can show the location of the property on the map including its area giving more details. Who wouldn't want that?
Not only all of these, after these lectures, you will also learn about all the basics of Google Maps.
You will be able to show the people you have previously saved over google maps too.
You will gain knowledge about map markers.
You will gain knowledge about complex map markers.
You will see the photos which you have taken from the database as a marker and be able to add links to them.
I have learnt everything about Geodjango, learnt about the types of data, I understand Google Maps too, yes, but you talk a lot about the latitude and logitude information. Where can I find that information?
This is a very smart question. If you want to do this on web, don't worry, I also talk about the usage of the html 5 geolocation feature.
If you have a mobile app (objective-c for iOS and java for android) it is extremely easy to receive the latitude and longitude information. What you do with mobile applications is the same as posting the latitude and longtitude information to the server.
Wow, the amount of information in the lectures are unbelievable! I think that's all we learn.
No. Lastly, let's talk about GEOIP. Basically, GEOIP works by receiving the IP adress to receive information such as the country, county, city, district, adress. And yes, with these lectures, you would be able to learn how to use the GEOIP library.

Koşullar nelerdir?

  • Python
  • Django
  • Postgresql

Bu kurstan ne alacağım?

  • 22'den fazla ders ve 3 saat içerik!
  • You will gain knowledge about apps such as swarm, tinder and foursquare.
  • If you are thinking about creating a location-based product, you will be able to do this easily.
  • For example, you will be able to find and list users who are the nearest to the farthest to the London eye.
  • If you have a website about real estates like where you sell property, you can save the limits of the land/property into your database and will be clearly shown on the map.
  • You will be able to search and match up other people who are near eachother and you will be able to show the amount of distance in between the two users. App examples: instamessage and wechat.
  • For example, if you want only the people in a particular area to chat to each other for example people who are in the beach, you can set km limits and people outside that km limit will not be able to use the chat. After this lecture, you will learn these.
  • Learn how to using geospatial databases
  • Learn how yo using postGis with postgreSQL
  • Learn why you need PROJ4 and GEOS
  • Learn how yo using geodjango

Hedef kitlesi nedir?

  • People who want to develop mobile apps that are check-in based such as Tinder, Swarm and Foursquare
  • People who have an idea about a location based idea
  • People who study about the geography knowledge system
  • Social network developers
  • Game developers
  • Real estate or location based web site developers

11 Temmuz 2015 Cumartesi

Django kullanıcıların IP adresini bulma

Djangoda ip adresini en hatasız şekilde bulmak için kullanılacak fonksiyon.


def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip

26 Mart 2014 Çarşamba

Neden Django?

Djangonun geliştirici dostu olduğunu söylemiştim. Neden mi?
Çeşitli kimlik doğrulama(authentication) yöntemleri mevcuttur. Username,emailler,Facebook, Twitter ve bu tarz kombinasyonlar ile giriş yapabilme imkanı verir.
Farklı veritabanı backendleri sunar. MySQL, PostgreSQL , hatta Non-relational veritabanları ve fazlasını kullanabilme imkanınız vardır. Bunların yanı sıra Sqlite3 denilen djangoya has kendi veritabanını ek işlem yapmadan kullanabilirsiniz.
Farklı mail gönderme stratejileri sağlar. Smtp, veritabanına kuyruklama ya da log to files ve daha fazlası ile mail gönderebilirsiniz.
Farklı dosya depolama metodları sunar.Lokal olarak saklayabileceğiniz gibi, FTP, Amazon S3 ya da kendinize has oluşturabilirsiniz.
Mesajlarınızı Sessionlar, cookieler ve diğerleri ile saklamınızı sağlar.
Cachemeleri Dosyalarda, Veritabanında , Memcache olarak yada sadece fake olarak yapabilirsiniz.

daha fazlası için http://bit.ly/djangoframework

13 Şubat 2014 Perşembe

web tasarım dersleri html css dersleri

Merhabalar eğer web sitesi yapmak istiyorsanız , evden çalışarak kazanç elde etmek yada herhangi bir yerde front end developer yani web tasarımcısı olarak çalışmak istiyorsanız veya elinizde bulunan birşeyleri satmak istyorsanız , bildiklerinizi insanlarla paylaşmak vb bu çok fazla uzatılabilir kitlenize internetten ulaşmak istiyorsanız web sitesi tasarımı için gerekli olan iki temel teknoloji olan html ve css ‘i biliyor olmanız gerekiyor.
Bu kursta bunlar hakkında hiç bir şeybilmiyor durumdaysanız en temelden başlayarak mozillayı indirme :) daha temeli olamazdı . PSD photoshop dosyalarını html sayfasına dönüştürmeye kadar öğreneceksiniz ve tabiki HTML ve CSS hakkında’da herşeyi öğreneceksiniz.
En can alıcı noktaysa sermayeye ihtiyaç duymadan yetenekleriniz doğrultusunda binlerce tl kazanabilirsiniz.
30 DOLAR OLAN eğitim setini 20 dolara almak için indirim kuponu :20DLR



https://www.udemy.com/web-tasarim-web-sitesi-nasil-yapilir-html-css-dersleri/?couponCode=20DLR#/

web sitesi geliştirme

12 Ocak 2014 Pazar

MongoDB Kullanımı (Çekirdek)

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.
cs:~ hakdogan$ mongod
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.
cs:~ cs$ mongo
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

MongoDB Kullanımı (Çekirdek)

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.
cs:~ hakdogan$ mongod
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.
cs:~ cs$ mongo
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