Hakan Yalitekin
Posted on April 21, 2021
Merhabalar,
Uzun bir zamandır bir şeyler paylaşmadığımı fark ettim, kurum içi etkileşim ve öğrenimi artırmak için hazırladığım içeriği bu platform üzerinden de paylaşmak istedim. Öncelikle tanımlardan başlayalım ve sonrasında küçük bir örnek yapalım.
MognoDB Nedir?
MongoDB resmi sitesinde kendisini şu şekilde tanımlıyor;
“MongoDB, modern uygulama geliştiricileri ve bulut çağı için oluşturulmuş genel amaçlı, doküman tabanlı, dağıtılmış bir veri tabanıdır.”
Resmi tanımlamaya ilaveler yapacak olursak; verilerin doküman olarak tutulduğu, -dokümandan kasıt JSON formatı- açık kaynak kodlu, ücretsiz NoSQL bir veri tabanıdır.
MongoDB’yi bankacılık sektörü gibi verinin çok önemli olmadığı durumlar hariç, pek çok senaryo için kullanmak mümkün. Örneğin; loglamalar, birçok tablodan beslenen listeleme(rapor) ekranları en sık kullanılan senaryolardır.
Peki resmi tanımda doküman tabanlı derken kastedilen NoSQL database nedir? MongoDB’nin detaylarına inmeden kısaca NoSQL’den bahsedelim.
NoSQL Nedir?
NoSQL, “Not Only SQL”in kısaltılmış halidir. ilişkisel veri tabanlarına alternatif, ilişkisel olmayan, esnek yapılı, büyük verili ve çok sayıda request-response dönen sistemlerde, yüksek performans ve yönetim kolaylığı sunan veri tabanı çözümüdür.
NoSQL illaki doküman tabanlı olmak zorunda değildir. Bir çok farklı türü mevcuttur.
NoSQL’in avantajları, dezavantajları, detaylı anlatımı ve diğer türleri ile ilgili aşağıdaki kaynaklara göz atabilirsiniz.
Amazon Türkçe Kaynak → https://aws.amazon.com/tr/nosql
Diğer bir kaynak (Halis Ak) →https://link.medium.com/pJ5vhQvLReb
Asıl konumuz olan MongoDB’ye dönecek olursak, konunun daha iyi pekişmesi için CURD işlemlerinden oluşan küçük bir .Net Core projesi yapalım.
Tabi projemize geçmeden önce MongoDB ile çalışmak için gerekli ortamı sağlayalım.
MongoDB ile Çalışma Ortamının Hazırlanması
MongoDB ile ilgili çalışabileceğimiz bir çok farklı ortam yaratmak mümkün,
- İşletim sistemine kurulum yaparak; https://www.mongodb.com/try/download/community üzerinde işletim sisteminize uygun versiyonu seçip kurulumu yapabiliriz.
- MongoCloud kullanarak; https://www.mongodb.com/cloud linki üzerinden hesap açarak, ücretsiz 500mb limitli veri tabanı kümleri oluşturabiliriz.
- Docker’a kurulum yaparak; (bizim örneğimiz) https://hub.docker.com/_/mongo linki üzerinden gerekli talimatları takip ederek. MongoDB’yi kullanmak mümkün
Docker Üzerinde MongoDB’nin kurulması
Docker’da MongoDB’yi standart portta ayaklandırmak için, aşağıdaki kodu çalıştırıyoruz. (Eğer yüklü değilse zaten yüklüyor)
docker run -d --name Mongo101 -p 27017:27017 mongo:latest
Container’imiz ayaklandığına göre, içine girip inceleyebiliriz.
docker exec -it Mongo101 bash
Daha sonrasında MongoDB’yi incelemek istersek, eriştiğimiz bash’e mongo komutunu vererek Mongo Shell'e erişmemiz yeterlidir. Aşağıdaki versiyon bilgilerinin, connection string bilgilerini görebiliyor olmamız gerekir.
mongo
Proje Öncesi MongoDB’ye bir göz atalım
Artık mongo komutları verebildiğimize göre ilk kurulumda gelen default veri tabanlarının listesine bir göz atalım.
#Mongo shell komutu
**show dbs**
MongoDB case sensitive (harf duyarlı) bir yapıdadır. Bu yüzden büyük küçük harflere dikkat edilmelidir.
Default gelen DB’lere göz gezdirdiğimize göre artık kendi DB’mizi oluşturma vakti geldi. Bunun için use komutunu kullanabiliriz. Eğer varsa kullanacak, yoksa yeni oluşturulacak.
**use eStoreDB**
#Extra Bilgi:"use" komutu ile gidilmiş o anki DB'yi siler.(use eStoreDB)
**db.dropDatabase()**
DB’yi oluşturduk, şimdi sıra geldi tablomuzu(collection) oluşturmaya.
**db.createCollection("users")**
#Extra Bilgi: Collection(tablolar)'ı listeler.
**db.getCollectionNames()**
#Extra Bilgi: Collection'u(tabloyu siler)
**db.users.drop()**
DB'miz ve Tablomuz(Collection) hazır olduğuna göre örnek bir kaç kayıt atalım. Bunun için insertMany metodunu kullanacağız.
MongoDB’nin Temel CRUD yapısını inceleyelim → https://docs.mongodb.com/manual/crud/
MongoDB Karşılaştırma Operatörleri inceleyelim → https://docs.mongodb.com/manual/reference/operator/query/
MongoDB’nin SQL’e karşılık gelen yapısını inceleyelim → https://docs.mongodb.com/manual/reference/sql-comparison/
**Yukarda insert örneği görmüştük simdi bir kaç örnek listeleme sorgu yazalım;**
#Tüm kullanıcıları listele
**db.users.find().pretty()**
#Yaşı 25'ten büyük olanların Ad-Soyad bilgisini getir.
**db.users.find({ age:{$gt:25}} , {firstName:1, lastName:1}).pretty()**
Temel hatlarıyla MongoDB üzerine fikir sahibi olduğumuza göre ilk uygulamamızı kodlamaya başlayabiliriz.
MongoDB CRUD işlemleri (.Net 5)
1.Adım → Uygulamanın Oluşturulması
Öncelikle bir Web API projesi oluşturuyoruz.
Proje adını MongoDB101.API, solution adını MongoDB101 olarak ayarlıyoruz.
Daha sonrasında ise, framework olarak .NET 5.0 ve beraberinde gelen swagger desteği için Enabel OpenAPI support ’u işaretliyoruz.
Default olarak gelen controller ve klası siliyoruz.
Projemizi oluşturduğumuza göre, MongoDB’yi kullanabilmek için ihtiyacımız olan nuget paketini aşağıdaki görsel yardımı ile kuralım.
2.Adım → MongoDB’ye erişmek için gerekli olan konfigürasyonlar
Şimdi sıra geldi MongoDB’ye bağlanma aşamasına. Bunun için öncelikle -— 📂 Settings adında bir klasör, akabinde IDbSettings adında public bir interface oluşturuyoruz ve içeriğine aşağıdaki property’leri ekliyoruz.
Bu interface’i implemente edecek olan MongoDbSettings adındaki klasımızı oluşturuyoruz. IDbSettings interface’imizi implemente ediyoruz.
appsettings.json dosyasına MongoDB’ye bağlanmak için gerekli olan tanımlamalarımız yapıyoruz.
Startup.cs klasımıza gidip aşağıdaki kodlarımızı ConfigureServices'in altında tanımlıyoruz. Ne anlama geldiklerini aşağıda yorum olarak ekledim.
3.Adım → Collection’a karşılık gelen modelin oluşturulması
Servis katmanımızı yazmadan önce modelimizi oluşturalım. Uygulamamıza öncelikle 📂 Model adında bir klasör ve sonrasında User adında bir klas ekleyelim ve içeriğini aşağıdaki gibi dolduralım.
property’lerin üzerlerinde bulunan attribute’lerin ne ifade ettiğini yorum olarak belirttim.
4.Adım → Service’in yazılması
Projemize 📁 Service adında bir klasör ve UserService adında bir klas oluşturalım. Constructor’ımızı aşağıdaki gibi düzenleyelim. Akabinde ilgili metotlarımızı ekleyelim.
5.Adım → Controller’ın oluşturulması
UserController ’ımızı oluşturalım fakat oluştururken API ’ı seçtiğimize emin olalım.
UserService'in constructor'ında ihtiyacımız olan settings bilgilerini aşağıdaki gibi ekliyoruz. Akabinde ilgili metotlarımızı yazmaya başlıyoruz.
6.Adım → Swagger ile metotların tetiklenmesi
Uygulamamızı çalıştırdığımızda şöyle bir ekranın bizi karşılaması gerekiyor ve bu da sırasıyla endpoint’lerimizi test edebiliriz demektir.
Umarım ufakta olsa faydam dokunmuştur. Bir sonraki yazıda görüşmek üzere.
Posted on April 21, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.