Atıştırmalık MongoDB Yazısı

Selam bu yazı MongoDB’ye yeni giriş yapmış olan ben ve benim gibiler için atıştırmalık bir yazı. Bu yazıda basit olarak insert ve select işlemlerinden bahsedeceğim. MongoDB nedir gibi artık klişe hale gelmiş bilgileri paylaşmak yerine direkt olarak nasıl yapılır’ı anlatacağım.

[NOT]: Yazı uzun bir yazı olmuş. Şimdiden özür dilerim 🙂

/images/posts/mongo.png

Online MongoDB Ortamıyla Tanışın

Pratiğe giriş yapmadan önce MongoDB bilgisayarınızda kurulu olmalı. MongoShell olmadan bilgisayarınızdan bağlantıyı kurmanız mümkün değil. Online shell kullanırsanız ayrı. Kurulum aşamalarını geçtiniz varsayarak size MongoLaB sitesini önereceğim.

https://mlab.com Bu adrese girip kaydolarak ücretsiz 500 MB MongoDB hakkı kazanıyorsunuz. Tabii ki online çalışmak zorunda değilsiniz bu bir alternatif.

Kaydolduktan sonra bir veritabanı oluşturmalısınız ve bu veritabanı için bir kullanıcı da oluşturmanız gerekiyor ki buraya kadar olan kısım standart yapıyla aynı. Her şeyi doğru yaptıysanız çalışma alanınızın görüntüsü şöyle olmalı:

/images/posts/mongolab.png

MongoDB’yi Local Ortamda Kullanmak

Eğer MongoDB’yi herhangi bir sınırlama olmaksızın (500 MB gibi) local ortamda kullanmak isterseniz öncelikle komut satırına mongod komutunu yazmalısınız. Bu sayede MongoDB sunucusu başlatılır. Varsayılan port olarak 27017 dinlenir. Bunu söyleme sebebim yukarıdaki ilk seçenekte varsayılan port farklı.

/images/posts/mongod_local.png

Daha sonra ikinci bir komut satırını açarak mongo komutunu verip local mongodb kullanımına başlayabilirsiniz.

/images/posts/mongo_local.png

Veritabanını Seçelim

Veritabanını seçme işlemi, mongoshell üzerinde diğerlerinde olduğu gibi use ile olacaktır. Localde çalışanlar için test veritanı şöyle seçilir:

Ufaktan Insert Operasyonları

Veritabanını seçtik. MongoDB kullanırken insert operasyonları, RDBMS’lerden farklı şekilde çalışabilir. Burada yaşayacağınız farklılık syntax anlamında olabilir. Ancak NodeJS kullanıcılarının bu işlemlere karşı yabancı olacağı pek söylenemez 🙂

MongoDB’de insert operasyonları üç metod altında toplanmıştır. Bunlar sırasıyla;

insert(), insertOne() ve insertMany() metodlarıdır. Bu metodları kullanırken verilerin JSON türünden olduğuna dikkat etmelisiniz. Yani JSON’a da aşina olmanız gerekmektedir. Neyse ki öğrenmesi çok da zor değil.

Basit Olarak Insert

Basit olarak bir insert operasyonu şöyle olur.

DBNESNESİ.TABLO.INSERT bu sahte yöntemin gerçeğe dönüşmüş hali şöyledir:

O zaman bir blog sisteminin yapısından yola çıkarak şöyle olacak diyebiliriz:

Evet klasik bir insert operasyonunu gördük. Bu kodları Mongoshell üzerinde çalıştırınca şu çıktıyı alırsanız her şey doğrudur:

Nedir Bu insertOne() ?

Bilinen bir yanlıştan dolayı insert ve insertOne karıştırılmakta. insert sadece tek bir ekleme yapmaz. Eğer sadece insert metodunu kullanıyorsanız birden fazla ekleme de yapabilirsiniz. Örnek:

Ancak insertOne metodu böyle değil. Sadece ve sadece bir adet ekleme gerçekleştirebilirsiniz. Ayrıca insertOne metodu ile insert edilen içeriğin ID’sini de alabilirsiniz. Kullanımı şöyledir:

Yani ikinci bir başlık ekleme işlemi yapamazsınız. Evet bu kadar basit.

Gelelim insertMany() Metoduna

insert ve insertMany metodları da çoklu ekleme işlemlerini destekler. Ancak insert metodu ile yapılan ekleme işlemlerinde, geriye bir insertedId dönmezdi. Aynı işlemi insertMany ile yaparsak bir ID dönüşü alırız:

Şimdi Bu Verileri Nasıl Çekeriz?

Veri çekme işlemi MongoDB üzerindeki en basit işlemlerdendir. Örneğin Yazilar tablosundan verileri çekelim. Bunun için find() metodunu kullanırız:

Nerede Bu WHERE Clause?

Benim en çok merak ettiklerimden birisi de bu konuydu. MongoDB üzerinde where aynı mantığa sahip olsa da kullanımı tabii ki farklı. Yine find() metodunu kullanacağız.

Yukarıdaki kullanımla tek satırlık bir değer dönecektir. Ancak aynı değere sahip 2 içerik varsa onları unique yapan diğer değerleri de sorgulamanız iyi olur.

Hadi Bu İçerikleri Sıralayalım

ASC ve DESC olaylarını RDBMS üzerinde kullanırken ORDER BY kullanıyorduk. Ancak bunda maalesef ki böyle değil. Fakat daha basit olduğunu söyleyebilirim. Yine find() metodunu olaya dahil ederek şöyle bir işlem yapabiliriz:

Yukarıdaki yöntemle birlikte ASCENDING bir sıralama yapabilirsiniz. Bunun tam tersi olarak DESCENDING işlemi ise şöyle yapılır:

Limit Falan Nasıl Olacak?

Şimdi bu işlemde de find() metodunu kullanıyoruz. Tabi bu sefer sort() metodu da bize katılıyor. Limit işlemini limit() metodunu kullanarak yaparız. Örneğin kullanımı şöyle:

Yukarıdaki yöntem bize son eklenen verinin içeriğini döndürecektir ve dönen değer tek satırdır. Çünkü limit metodu parametre olarak tek 1 rakamını almıştır. Dilersek dönen değerdeki tek bir alana dair de veri çekebiliriz. Ben bu işlemde kendim ID adında bir alan tanımladım. MongoDB tarafından üretilen _id alanından farklı olduğunu belirteyim. Şimdi tanımlı olan bu alanı çekelim:

Buradan anlaşılacağı üzere eklenmiş olan verilerden en sonuncusu getirilip bu satırdaki ID alanında yer alan veriyi göreceğiz. Klasik bir array access işleminden fazlası değil yani.

Evet anlatım bu kadar. Uzun bir yazı dizisi oldu. Eğer CRUD işlemleri hakkında daha fazla bilgi istiyorsanız MongoDB Manual sizin için iyi bir yol gösterici olacaktır.