MongoDB ile CURD işlemleri(.Net 5)
Tags: mongodb, csharp, crud, dotnet
Published: 2021-04-21 06:59:28

---
title: MongoDB ile CURD işlemleri(.Net 5)
published: true
date: 2021-04-04 18:05:28 UTC
tags: mongodb,csharpprogramming,crud,dotnet
canonical_url: https://hakanyalitekin.medium.com/mongodb-ile-curd-i%C5%9Flemleri-net-5-dafafa34fccd
---

![](https://cdn-images-1.medium.com/max/1024/1*_8ipXv_TE3DVRGyEYOYokQ.jpeg)

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](https://aws.amazon.com/tr/nosql/)  
**Diğer bir kaynak (**[**Halis Ak**](https://medium.com/u/877110501571)**)** →[https://link.medium.com/pJ5vhQvLReb](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](https://www.mongodb.com/try/download/community) üzerinde işletim sisteminize uygun versiyonu seçip kurulumu yapabiliriz.
- **MongoCloud kullanarak;** [https://www.mongodb.com/cloud](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](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**

![](https://cdn-images-1.medium.com/max/1024/1*QM7QijuPTwcDw6b1f7GFUA.png)

### 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.

![](https://cdn-images-1.medium.com/max/202/1*agxbhouTUILvo27WXcI4aA.png)

```
#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.

{% gist https://gist.github.com/hakanyalitekingist/4e8a1468d9e7473e7c3433580f209c47 %}

**MongoDB’nin Temel CRUD yapısını inceleyelim →** [https://docs.mongodb.com/manual/crud/](https://docs.mongodb.com/manual/crud/)

**MongoDB Karşılaştırma Operatörleri inceleyelim →** [https://docs.mongodb.com/manual/reference/operator/query/](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/](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.

![](https://cdn-images-1.medium.com/max/1007/1*3pKQnOvJQ7nZVzs_vPx6tA.png)

Proje adını **MongoDB101.API,** solution adını **MongoDB101** olarak ayarlıyoruz.

![](https://cdn-images-1.medium.com/max/866/1*YDWc_vqpvCFsFZCUkpMeHQ.png)

Daha sonrasında ise, framework olarak  **.NET 5.0** ve beraberinde gelen **swagger** desteği için **Enabel OpenAPI support** ’u işaretliyoruz.

![](https://cdn-images-1.medium.com/max/767/1*lvKt77STylj5Xknowfjfrg.png)

![](https://cdn-images-1.medium.com/max/401/1*Fziu1iaI6Dk-fj8ILy8Y9w.png)

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.

![](https://cdn-images-1.medium.com/max/1024/1*o5-uI_Zv_GkmsKmxMgGgFg.png)

#### 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.

{% gist https://gist.github.com/hakanyalitekingist/6dec1cee5a5d319da8d1c288846e76f9 %}

Bu interface’i implemente edecek olan **MongoDbSettings** adındaki klasımızı oluşturuyoruz. **IDbSettings** interface’imizi implemente ediyoruz.

{% gist https://gist.github.com/hakanyalitekingist/10ba28ccada383bddfb512f78b556d4c %}

**appsettings.json** dosyasına MongoDB’ye bağlanmak için gerekli olan tanımlamalarımız yapıyoruz.

{% gist https://gist.github.com/hakanyalitekingist/63ec64560238746bdfcd2f0939985ead %}

**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.

{% gist https://gist.github.com/hakanyalitekingist/c92ad99e3ffb62c111e99dfe5e0443ca %}

#### 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.

{% gist https://gist.github.com/hakanyalitekingist/b0cf01e3422d4d0453c7253878dc4753 %}

#### 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.

{% gist https://gist.github.com/hakanyalitekingist/927a7e4e90c4eaac3561ca22d8c0be20 %}

#### 5.Adım → Controller’ın oluşturulması

**UserController** ’ımızı oluşturalım fakat oluştururken **API** ’ı seçtiğimize emin olalım.

![](https://cdn-images-1.medium.com/max/916/0*GFWg8bdj7GFiJpIs)

**UserService**'in constructor'ında ihtiyacımız olan **settings** bilgilerini aşağıdaki gibi ekliyoruz. Akabinde ilgili metotlarımızı yazmaya başlıyoruz.

{% gist https://gist.github.com/hakanyalitekingist/4500c6664dc7c9b696fbaa07f0aa81e5 %}

#### 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.

![](https://cdn-images-1.medium.com/max/1024/0*pjKuctIumHuEH4lc)

Umarım ufakta olsa faydam dokunmuştur. Bir sonraki yazıda görüşmek üzere.