Asp.Net Mvc’de MongoDb Kullanımı
Merhabalar,
Nosql database ler günümüzde hayli kullanılmakta.Performans açısından büyük olanaklar sağlıyor.Gördüğüm kadarıyla özellikle eticaret uygulamalarında ve mobil uygulamalarda yaygın olarak kullanılıyor.
Nosql databaselerin gördüğüm kadarıyla en yaygın olanı MongoDb ile CRUD işlemleri yapacağız.Bu arada MongoDB ilk defa duyanlar için güzel bir makaleyi de buraya bırakıyorum isteyen okuyabilir.
MongoDb’yi bilgisayarımıza kurduk.Bu arada mongo db için güzel bir client uygulaması buldum onuda paylaşmak isterim.Buradan indirebilirsiniz.
Şimdi uygulamamıza geçelim.Uygulamaya geçmeden önce MongoDb yi çalıştırmayı unutmayalım.
Ben Deneme adında bir db oluşturup içerisinede Users diye bir collection(yani tablo) açtım.

Öncelikle DbConnection class ımı oluşturdum.
private static MongoClient _client;private static MongoServer _server;private static MongoDatabase _database;private static DbConnection Instance;private DbConnection() { }public static DbConnection ActiveInstance{get{if(Instance == null){_client = new MongoClient("mongodb://localhost:27017");_server = _client.GetServer();_database = _server.GetDatabase("DenemeDb");Instance = new DbConnection();}return Instance;}}public MongoDatabase Db{get{return _database;}}
UserModel adında entity nesnemi oluşturuyorum.
public ObjectId Id { get; set; }public string UserId { get; set; }[Required]public string UserName { get; set; }[Required]public string Password { get; set; }
ObjectId properties ini biz set etmiyoruz.MongoDB kendisi _id adında bir primary key tanımlıyor.
Şimdi Repository class ımızı oluşturalım.Ben genelde repository pattern i kullanıyorum db işlemleri için.
public class UserRepository{/// <summary>/// Tablodaki tüm datayı çeker./// </summary>public IEnumerable<UserModel> GetAll(){return DbConnection.ActiveInstance.Db.GetCollection<UserModel>("Users").FindAll();}/// <summary>/// Gönderilen user id ye göre ilgili datayı çeker./// </summary>/// <param name="id"></param>public UserModel GetById(string id){var res = Query<UserModel>.EQ(p => p.UserId, id);return DbConnection.ActiveInstance.Db.GetCollection<UserModel>("Users").FindOne(res);}/// <summary>/// Users tablosuna yeni kayıt ekler./// </summary>/// <param name="entity"></param>public void Add(UserModel entity){DbConnection.ActiveInstance.Db.GetCollection<UserModel>("Users").Save(entity);}/// <summary>/// Gönderilen datalist i toplu olarak users tablosuna kaydeder./// </summary>/// <param name="datalist"></param>public void AddBatch(List<UserModel> datalist){DbConnection.ActiveInstance.Db.GetCollection<UserModel>("Users").InsertBatch(datalist);}/// <summary>/// Db deki kaydı Gönderilen data ile günceller./// </summary>/// <param name="entity"></param>public void Update(UserModel entity){var res = Query<UserModel>.EQ(pd => pd.UserId, p.UserId);var operation = Update<UserModel>.Replace(p);DbConnection.ActiveInstance.Db.GetCollection<UserModel>("Users").Update(res, operation);}/// <summary>/// Gönderilen id ye ait kaydı siler./// </summary>/// <param name="id"></param>public void Remove(string id){var res = Query<UserModel>.EQ(e => e.UserId, id);var operation = DbConnection.ActiveInstance.Db.GetCollection<UserModel>("Users").Remove(res);}}
Bunlar en temel fonksiyonlar tabi crud dediğimiz.Siz bu fonksiyonları geliştirebilir çoğaltabilir ihtiyacınıza göre repository inizi şekillendirebilirsiniz.
Repository nesnemizi de oluşturduktan sonra artık sonrasında controller tarafında bu nesneyi kullanarak kayıt ekleme silme view da listeleme vs. gibi işlemler kalıyor.Makalemizin odak noktası mongodb olduğu için o tarafları yazmıyorum.