Dev Arksoft
  • Arksoft Developer Network
  • Ağustos 2023
    • Angularda DOM (Document Object Model) Manipülasyonu
    • Angular’da Routing
    • Representational State Transfer (REST)
    • .Net Framework için Local NugetPackage
    • Agile Nedir?
  • Temmuz 2023
    • Angular HTTP Interceptors
    • Angularda Promise ve Observable
    • Mongo DB Kullanımı
  • Haziran 2023
    • Angular Validators
  • Mayıs 2023
    • Docker Uzerine Redis Kurulumu ve .Net Core ile Redise Erişim
  • Nisan 2023
    • Angular 14 Componentler Arası İletişim
  • Şubat 2023
    • JMeter ile Performans Testi
  • Ocak 2023
    • Windows Giriş Ekranında C# Form Açmak
  • Temmuz 2022
    • Regular Expressions
  • Haziran 2022
    • RSA Şifreleme
    • AutoMapper Kullanımı
    • Permutasyon ve Kombinasyon
    • Generic Repository Pattern
    • Levenshtein Algoritması
    • HTML 5’e Giriş
    • Graph Yapılar
  • Mayıs 2022
    • IQueryable IEnumerable Farklar
    • Sıralama Algoritmaları
  • Şubat 2022
    • ADFS Custom 2FA Integration
    • Reacta Giriş ve Reactın Temel Prensipleri
    • TypeScript Kullanımı
    • Serialization Kullanımı
    • Log4Net Kullanımı
    • Collections Yapıları
    • Windows Service Projesini Debug Etme ve Harici Exe Çalıştırma
    • Culture ve DateTime Kullanımı
    • Reflection Kullanımı
    • Steganografi Teknikleri
    • ElasticSearch Kullanımı
    • SWAGGER ve JWT TOKEN BASED WEBAPI Kullanımı
    • LINQ Komutları Kullanımı
    • Image Processing İşlemleri Kullanımı
Powered by GitBook
On this page
  • MongoDB Nedir?
  • Yararlanılan Kaynaklar
  • Kurulum
  • VisualStudio Console Projesi Oluşturma
  • MongoDB IDE
  • Sonuç
  1. Temmuz 2023

Mongo DB Kullanımı

Husamettin Elalmis

MongoDB Nedir?

  • NoSQL (Not Only SQL) veritabanıdır

  • Dünya çapında kullanılan Popüler Veritabanlarından bir tanesidir.

  • BSON-JSON formatında çalıştır

Yararlanılan Kaynaklar

  • https://www.mongodb.com/docs/drivers/csharp/current/

  • https://learn.microsoft.com/tr-tr/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-7.0&tabs=visual-studio

Kurulum

  • MongoDB, ATLAS Cloud üzerinde ücretli çalışan bir veritabanıdır. Öğrenme amaçlı Free sürümü AWS ortamında vardır.

  • Local bilgisayara MSI.exec ile kurulumu yapılabilir. Ben bu makalede local bilgisayarıma MongoDB kurup denemeleri yaptım.

VisualStudio Console Projesi Oluşturma

  • .NetFramework 4.7.2 ConsoleApplication projesi oluşturun

  • Install - Package MongoDB.Driver -version 2.20.0 komutunu package managerdan çalıştırıp driver kurun.

MongoDB IDE

IDE Kullanımı PostgreSQL ve ElasticSearch’e benzemektedir. MongoDB Compass olarak adı geçer.

Program.cs
using System;
using System.Threading.Tasks;
 
namespace MongoDbArge
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            // https://www.mongodb.com/try/download/community
            // Install - Package MongoDB.Driver -version 2.20.0
            // https://www.mongodb.com/docs/drivers/csharp/current/
            // https://learn.microsoft.com/tr-tr/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-7.0&tabs=visual-studio
 
            var conString = "mongodb://localhost:27017/";
            var res = new object();
            BlogRepository repo = new BlogRepository(conString, "ArkSoftBlogDb", "DevBlog");
 
            // CheckConnection
            res = repo.CheckConnection();
            Console.WriteLine("== CheckConnection ==");
            Console.WriteLine($"IsConnected:{res}");
 
            // DeleteAllBlogs
            res = await repo.DeleteAllBlogs();
 
            // Insert blogs
            await SeedDatas(repo);
 
            // GetAllUsers
            Console.WriteLine();
            Console.WriteLine($"== GetAllBlogs ==");
            var blogs = await repo.GetAllBlogs();
 
            foreach (var item in blogs)
            {
                Console.WriteLine($"{item.Id} | {item.AuthorName} | {item.Title} | {item.Context} | {item.Category}");
            }
 
            // GetBlogsByField
            Console.WriteLine();
            Console.WriteLine($"== C# Blogları (Filtrelenmiş) ==");
            var filteredBlogs = await repo.GetBlogsByField(nameof(BlogItem.Category), "C#");
 
            foreach (var item in filteredBlogs)
            {
                Console.WriteLine($"{item.Id} | {item.AuthorName} | {item.Title} | {item.Context} | {item.Category}");
            }
 
            Console.ReadLine();
        }
 
        private static async Task SeedDatas(BlogRepository repo)
        {
            var bi = new BlogItem()
            {
                AuthorName = "Başak Toprak HİÇDURMAZ",
                Title = "JIRA Temel Kullanımı ve Özellikleri",
                Context = "Bla bla1...",
                Category = "Business"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Burak GÜLER",
                Title = "Detection Method Oluşturma",
                Context = "Bla bla2...",
                Category = "SCCM/WSUS"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Can DOĞU",
                Title = "Windows Servis Projelerinde PipeLine Kullanımı",
                Context = "Bla bla3...",
                Category = "C#"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Direnç ÖNEN",
                Title = "SCCM/WSUS ve Easy2Patch Entegrasyonu",
                Context = "Bla bla4...",
                Category = "E2P"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Hüsamettin ELALMIŞ",
                Title = "Design Patterns",
                Context = "Bla bla5...",
                Category = "C#"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Mustafa ŞEKER",
                Title = "Angular'da HTTP GET/POST Kullanımı",
                Context = "Bla bla6...",
                Category = "Angular"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Orçun TEN",
                Title = "Docker Kullanımı ve Uygulamalı Deployment",
                Context = "Bla bla7...",
                Category = "C#"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Ömer SOYER",
                Title = "File Upload İşlemlerinde Yazılım Tarafında Dikkat Edilmesi Gereken Hususlar",
                Context = "Bla bla8...",
                Category = "C#"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Tunahan ERKEN",
                Title = "FastReport Designerda Rapor Oluşturmak",
                Context = "Bla bla9...",
                Category = "C#"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Uğur SAĞLAM",
                Title = "Selenium Tabanlı Test Automation Uygulaması Yazmak",
                Context = "Bla bla10...",
                Category = "C#"
            };
            await repo.InsertBlog(bi);
 
 
            bi = new BlogItem()
            {
                AuthorName = "Volkan DİNÇER",
                Title = "Test Süreçleri Hakkında Bilmemiz Gerekenler (BlackBox, WhiteBox ve Diğerleri)",
                Context = "Bla bla11...",
                Category = "Test"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Volkan ÖNDER",
                Title = "Angularda Validation İşlemleri",
                Context = "Bla bla12...",
                Category = "Angular"
            };
            await repo.InsertBlog(bi);
 
            bi = new BlogItem()
            {
                AuthorName = "Yusha KURALAY",
                Title = "HTML5'e Giriş - Template Design Edelim I - ",
                Context = "Bla bla13...",
                Category = "HTML5"
            };
            await repo.InsertBlog(bi);
 
        }
    }
}

Repository.cs
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;
using System.Collections.Generic;
using System.Threading.Tasks;
 
namespace MongoDbArge
{
    public class BlogItem
    {
        [BsonId]
        public ObjectId Id { get; set; }
 
        [BsonElement("authorName")]
        public string AuthorName { get; set; }
 
        [BsonElement("title")]
        public string Title { get; set; }
 
        [BsonElement("context")]
        public string Context { get; set; }
 
        [BsonElement("category")]
        public string Category { get; set; }
    }
 
    public class BlogRepository
    {
        // Variables
        private IMongoClient _client;
        private IMongoDatabase _database;
        private IMongoCollection<BlogItem> _BlogsCollection;
 
        // Ctor
        public BlogRepository(string connectionString, string dataBase, string collection)
        {
            _client = new MongoClient(connectionString);
            _database = _client.GetDatabase(dataBase);
            _BlogsCollection = _database.GetCollection<BlogItem>(collection);
        }
 
        // CheckConnection - bağlantı kontrolü yapar
        public bool CheckConnection()
        {
            try
            {
                _database.ListCollections();
            }
            catch
            {
                return false;
            }
 
            return true;
        }
 
        // GetAllBlogs - Tüm blogları getir
        public async Task<List<BlogItem>> GetAllBlogs()
        {
            return await _BlogsCollection.Find(new BsonDocument()).ToListAsync();
        }
 
        // GetBlogsByField - Filtreleme yapar
        public async Task<List<BlogItem>> GetBlogsByField(string fieldName, string fieldValue)
        {
            var filter = Builders<BlogItem>.Filter.Eq(fieldName, fieldValue);
            var result = await _BlogsCollection.Find(filter).ToListAsync();
 
            return result;
        }
 
        // GetBlogs - Pagination yapar
        public async Task<List<BlogItem>> GetBlogs(int startingFrom, int count)
        {
            var result = await _BlogsCollection.Find(new BsonDocument()).Skip(startingFrom).Limit(count).ToListAsync();
 
            return result;
        }
 
        // InsertBlog - Kayıt ekler
        public async Task InsertBlog(BlogItem user)
        {
            await _BlogsCollection.InsertOneAsync(user);
        }
 
 
        // DeleteBlogById - Kayıt siler
        public async Task<bool> DeleteBlogById(ObjectId id)
        {
            var filter = Builders<BlogItem>.Filter.Eq("_id", id);
            var result = await _BlogsCollection.DeleteOneAsync(filter);
            return result.DeletedCount != 0;
        }
 
        // DeleteAllBlogs - Tüm kayıtları siler
        public async Task<long> DeleteAllBlogs()
        {
            var filter = new BsonDocument();
            var result = await _BlogsCollection.DeleteManyAsync(filter);
            return result.DeletedCount;
        }
 
        // UpdateBlog - Kayıt günceller
        public async Task<bool> UpdateBlog(ObjectId id, string fieldName, string value)
        {
            var filter = Builders<BlogItem>.Filter.Eq("_id", id);
            var update = Builders<BlogItem>.Update.Set(fieldName, value);
            var result = await _BlogsCollection.UpdateOneAsync(filter, update);
 
            return result.ModifiedCount != 0;
        }
 
        // CreateIndexOnNameField - Aktif collection üzerinde alan adına göre göre Index oluşturur
        public async Task CreateIndexOnNameField()
        {
            var keys = Builders<BlogItem>.IndexKeys.Ascending(x => x.AuthorName);
            await _BlogsCollection.Indexes.CreateOneAsync(keys);
        }
 
        // CreateIndexOnCollection - İlgili collection üzerinde Index oluşturur
        public async Task CreateIndexOnCollection(IMongoCollection<BsonDocument> collection, string field)
        {
            var keys = Builders<BsonDocument>.IndexKeys.Ascending(field);
            await collection.Indexes.CreateOneAsync(keys);
        }
    }
}

Sonuç

  • Bu dokumanda MongoDB kullanımını uygulamalı görmüş olduk

  • Repository pattern temel düzeyde kullanılmıştır, genişletilebilir.

  • AWS sunucuları üzerinde kullanılabilir.

PreviousAngularda Promise ve ObservableNextAngular Validators

Last updated 1 year ago