شروع کار با MongoDB با استفاده از سی شارپ

کار با MongoDB

شروع کار با MongoDB با استفاده از سی شارپ ، در این مقاله نحوه ی شروع و کار با MongoDB را با استفاده از سی شارپ توضیح خواهیم داد.

این مقاله به شما کمک خواهد کرد تا اتصال به یک سرور، ایجاد یک پایگاه داده، ایجاد یک مجموعه، درج یک سند از یک مجموعه، کوئری گرفتن از یک مجموعه و مواردی این چنین را بیاموزید.

برای کار با MongoDB نیاز است درایور MongoDB C# را، که از MongoDB پشتیبانی می کند، دانلود کنید.

کار با MongoDB مشابه کار در LINQ و Entity Framework است.

MongoDB حاوی ویژگی ها و سبک کاری مشابه با آنچه LINQ دارد است. این یکی از ویژگی های عالی MongoDB است.

درایور : https://github.com/mongodb/mongo-csharp-driver/releases

اگر بخش قبلی مقاله ما را نخوانده‏ اید همواره می‏توانید در لینک‏ زیر مشاهده کنید.

کار با MongoDB

پیش از کدنویسی، ابتدا درایور را دانلود کنید، سپس رفرنس دو DLL به نام MongoDB BOSON و MongoDbdriver را افزوده و از رفرنس فضای نام های زیر استفاده کنید.

using MongoDB.Bson;  
using MongoDB.Driver;  
using MongoDB.Driver.Builders;  
using MongoDB.Driver.GridFS;  
using MongoDB.Driver.Linq; 

نحو (syntax) رشته ی اتصال

رشته ی اتصال پیش فرض: “mongodb://localhost”

رشته ی اتصال پیشین به سرور محلی پیش فرض که دارای پورت ۲۷۰۱۷ است متصل خواهد شد، شما می توانید از یک اتصال سفارشی/شخصی سازی شده مانند “mongodb://192.162.1.xx:27017” استفاده کنید.

ایجاد سرویس گیرنده

MongoClient client = new MongoClient(connectionString);  

مانند یک اتصال SQL، نیاز است یک سرویس گیرنده ی MongoDB ایجاد کنید، کد فوق یک شیء از Mongoclient ایجاد می کند که رشته ی اتصالی را به عنوان یک پارامتر می گیرد.

دریافت رفرنس سرور

MongoClient client = new MongoClient(connectionString);  
MongoServer server = client.GetServer();  

کد فوق یک ارجاع از سرور Mongo را دریافت کرده، تابع () GetServer  از سرویس گیرنده ی Mongo را که اشیاء سرور Mongo را برمی گرداند، فراخوانی می کند.

دریافت رفرنس پایگاه داده

برای ایجاد یک پایگاه داده ی Mongo جهت دریافت یک مجموعه (جدول در SQL Server)، جایی که داده های خود را ذخیره می کنید:

MongoClient client = new MongoClient(connectionString);  
MongoServer server = client.GetServer();  
MongoDatabase database = server.GetDatabase("Test"); 

این کد تابع GetDatabase را جهت دریافت رفرنسی از پایگاه داده ی Mongo فراخوانی می کند.

تابع GetDatabase نام سرور را به عنوان یک پارامتر دریافت می کند.

اگر پایگاه داده در دسترس نباشد، آنگاه MongoDB پایگاه داده ای با نام معین در پارامتر ایجاد کرده و پایگاه داده را برمی گرداند.

در اینجا کد در تلاش است تا رفرنسی از پایگاه داده ی آزمایشی را دریافت کند.

دریافت رفرنس مجموعه

مانند SQL Server ، یک پایگاه داده ی MongoDB حاوی مجموعه ای جهت ذخیره ی داده هاست.

برای دریافت رفرنسی از مجموعه، نیاز است تابع GetCollection از پایگاه داده ی MongoDB فراخوانی شود.

MongoClient client = new MongoClient(connectionString);  
MongoServer server = client.GetServer();  
MongoDatabase database = server.GetDatabase("Test");  
MongoCollection symbolcollection= database.GetCollection<Symbol>("Symbols"); 

تابع GetCollection یک نام نمادین را به عنوان پارامتر دریافت کرده و رفرنسی از مجموعه را برمی گرداند.

مانند تابع GetDatabase : تابع GetCollection نیز یک مجموعه ایجاد می کند.

اگر مجموعه ای در دسترس نباشد، آنگاه نام معین همان پارامتر است.

در اینجا نماد، موجودیتی است که نوع مجموعه را مشخص می کند.

دریافت رفرنس لیست مجموعه

لیستی از یک مجموعه ی Mongo می تواند از طریق فراخوانی تابع GetCollections از پایگاه داده نیز بدست آید، این عمل، تمامی مجموعه های موجود در پایگاه داده را در یک لیست برمی گرداند.

MongoClient client = new MongoClient(connectionString);  
MongoServer server = client.GetServer();  
MongoDatabase database = server.GetDatabase("Test");  
List<MongoCollection> collections=database.GetCollections();  

دور انداختن مجموعه از پایگاه داده

MongoClient client = new MongoClient(connectionString);  
MongoServer server = client.GetServer();  
MongoDatabase database = server.GetDatabase("Test");  
database.DropCollection("Symbols");  

تابع DropCollection از کلاس پایگاه داده ی Mongo، مجموعه ای مشخص شده از طریق نامی که در پارامتر است را از پایگاه داده حذف می کند.

درج در مجموعه

MongoClient client = new MongoClient(connectionString);  
MongoServer server = client.GetServer();  
MongoDatabase database = server.GetDatabase("Test");  
MongoCollection symbolcollection= database.GetCollection<Symbol>("Symbols");  

Symbol symbol = new Symbol ();  
symbol.Name = “Star”;  
symbolcollection.Insert(symbol);  

symbol (نماد) یک کلاس است، کد فوق یک شیء از یک نماد را در مجموعه درج می کند.

در ادامه، متوجه شناسه ای که از نوع ObjectID است خواهید شد.

ویژگی شناسه (id) در کد فوق مشخص نشده، چراکه اختیاری است، اگر یک مجموعه ی MongoDB را مشخص نکنید، آنگاه، مانند یک جدول SQL، بصورت خودکار یک شماره ی شناسه به آن می دهد.

مانند یک ستون شناسه ی تولید شده بصورت خودکار در یک جدول SQL Server.

public class Symbol  
{  
public string Name { get; set; }  
public ObjectId ID { get; set; }  
} 

کوئری گرفتن از مجموعه

کوئری گرفتن از لیست داده ها

MongoCollection symbolcollection= database.GetCollection<Symbol>("Symbols")  
List< Symbol > query = symbolcollection.AsQueryable<Symbol>().Where<Entity>(sb => sb.Name == "Star").ToList(); 

مشابه کوئری گرفتن از یک داده ی منفرد

Symbol symbol = symbolcollection.AsQueryable<Entity>().Where<Entity>(sb => sb.Name == "Kailash").SingleOrDefault();  

ذخیره ی داده ها در مجموعه

MongoCollection symbolcollection= database.GetCollection<Symbol>("Symbols")  
Symbol symbol = symbolcollection.AsQueryable<Entity>().Where<Entity>(sb => sb.Name == "Kailash").SingleOrDefault();  
symbolcollection.Save(symbol); 

تابع save/ذخیره ی مجموعه ی MongoDB، یک سند موجود را ذخیره می کند.

برای مثال، فرض کنید که می خواهید تمامی ستون های یک جدول موجود را اصلاح کرده و تغییرات را ذخیره کنید ؛ آنگاه نیاز است از تابع ذخیره کمک بگیرید.

بروزرسانی داده ها

Update، جایگزینی برای Save است.

تفاوت آن ها این است که Save کل سند را مجدد به سرور ارسال می کند، اما Update تنها تغییرات را ارسال می کند.

تابع Update یک پارامتر دریافت می کند.

برای مثال: فرض کنید نیاز است برخی ستون های یک جدول را تغییر داده و تنها مقدار ستون بروز شده را به سرور ارسال کنید، در آن موقعیت، نیاز است از تابع Update از مجموعه ی MongoDB استفاده کنید.

MongoCollection symbolcollection= database.GetCollection<Symbol>("Symbols")  
var query3 = Query<Symbol>.EQ(e => e.Id, ("0000000000021325640.0");  
var update = Update<Symbol>.Set(e => e.Name, "abc"); // update modifiers  
symbolcollection.Update(query3, update);

حذف داده ها از مجموعه

جهت حذف سندی موجود از مجموعه، تابع Remove کمک کننده است. تابع Remove یک شیء از یک موجودیت را به عنوان پارامتر دریافت می کند.

MongoCollection symbolcollection= database.GetCollection<Symbol>("Symbols")  
var query2 = Query< Symbol >.EQ(fd=>fd.Id, new ObjectId("0000000000021325640.0"));  
symbolcollection.Remove(query2);

جهت حذف تمامی داده ها از مجموعه:

symbolcollection.RemoveAll();
 

کد کامل

using System;   
using System.Collections.Generic;   
using System.Linq;   
using System.Text;   
using System.Timers;   
using MongoDB.Bson;   
using MongoDB.Driver;   
using MongoDB.Driver.Builders;   
using MongoDB.Driver.GridFS;   
using MongoDB.Driver.Linq;   
using System.Data.SqlClient;   
namespace MongodbRND   
{   
   class Program   
   {   
      static void Main(string[] args)   
      {   
         Console.WriteLine("Mongo DB Test Application");   
         Console.WriteLine("====================================================");   
         Console.WriteLine("Started By:Kailash Chandra Behera");   
         Console.WriteLine("Started On: 14 July 2014");   
         Console.WriteLine("Configuration Setting: 172.16.1.24:27017");   
         Console.WriteLine("====================================================");   
         Console.WriteLine("Initializaing connection");   
         string connectionString = "mongodb://172.16.1.24:27017";   
  
  
         Console.WriteLine("Creating Client..........");   
         MongoClient client = null;   
         try   
         {   
            client = new MongoClient(connectionString);   
            Console.WriteLine("Client Created Successfuly........");   
            Console.WriteLine("Client: " + client.ToString());   
         }   
         catch (Exception ex)   
         {   
            Console.WriteLine("Filed to Create Client.......");   
            Console.WriteLine(ex.Message);   
         }   
  
         Console.WriteLine("Initianting Mongo Db Server.......");   
         MongoServer server = null;   
         try   
         {   
            Console.WriteLine("Getting Servicer object......");   
            server = client.GetServer();   
  
            Console.WriteLine("Server object created Successfully....");   
            Console.WriteLine("Server :" + server.ToString());   
         }   
         catch (Exception ex)   
         {   
            Console.WriteLine("Filed to getting Server Details");   
            Console.WriteLine(ex.Message);   
         }   
  
  
         Console.WriteLine("Initianting Mongo Databaser.........");   
         MongoDatabase database = null;   
         try   
         {   
            Console.WriteLine("Getting reference of database.......");   
            database = server.GetDatabase("Kailash");   
            Console.WriteLine("Database Name : " + database.Name);   
         }   
         catch (Exception ex)   
         {   
            Console.WriteLine("Failed to Get reference of Database");   
            Console.WriteLine("Error :" + ex.Message);   
         }   
         try   
         {   
            Console.WriteLine("Deleteing Collection Symbol");   
            database.DropCollection("Symbol");   
         }   
         catch (Exception ex)   
         {   
            Console.WriteLine("Failed to delete collection from Database");   
            Console.WriteLine("Error :" + ex.Message);   
         }   
  
         Console.WriteLine("Getting Collections from database Database.......");   
  
  
         MongoCollection symbolcollection = null;   
         try   
         {   
            symbolcollection = database.GetCollection<Symbol>("Symbols");   
            Console.WriteLine(symbolcollection.Count().ToString());   
         }   
         catch (Exception ex)   
         {   
            Console.WriteLine("Failed to Get collection from Database");   
            Console.WriteLine("Error :" + ex.Message);   
         }   
         ObjectId id = new ObjectId();   
         Console.WriteLine("Inserting document to collection............");   
         try   
         {   
            Symbol symbol = new Symbol ();   
            symbol.Name = “Star”;   
            symbolcollection.Insert(symbol);   
            id = symbol.ID;   
  
            Symbol symbol = new Symbol ();   
            symbol.Name = “Star1”;   
            symbolcollection.Insert(symbol);   
            id = symbol.ID;   
  
            Console.WriteLine(symbolcollection.Count().ToString());   
         }   
         catch (Exception ex)   
         {   
            Console.WriteLine("Failed to insert into collection of Database " + database.Name);   
            Console.WriteLine("Error :" + ex.Message);   
         }   
  
         try   
         {   
            Console.WriteLine("Preparing Query Document............");   
            List< Symbol > query = symbolcollection.AsQueryable<Entity>().Where<Entity>(sb => sb.Name == "Kailash").ToList();   
  
            Symbol symbol = symbolcollection.AsQueryable<Entity>().Where<Entity>(sb => sb. ID == id).ToList();   
  
         }   
         catch (Exception ex)   
         {   
            Console.WriteLine("Failed to query from collection");   
            Console.WriteLine("Exception :" + ex.Message);   
         }   
         Console.WriteLine("");   
         Console.WriteLine("====================================================");   
         Console.ReadLine();   
      }   
   }   
   public class Symbol   
   {   
      public string Name { get; set; }   
      public ObjectId ID { get; set; }   
   }   
}    

خلاصه

در این مقاله ، ارتباط با MongoDB و نحوه ی کار با MongoDB با استفاده از سی شارپ را  آموختیم.

اتصال به یک سرور، دریافت رفرنس  پایگاه داده، ایجاد یک مجموعه، درج در یک مجموعه، کوئری گرفتن از یک مجموعه و دیگر موارد این چنینی را آموختیم.

زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

ما یک پرسشنامه‌ی کوچولو داریم، که قول میدیم وقتتون رو خیلی نمی‌گیره، ولی کلی به ما کمک می‌کنه، چون هم assessment مونه ,و هم شما به ما در این زمینه کمک میکنید.بزن بریم