چگونگی‌ کار با MongoDB به وسیله #C

شنبه 1 شهریور 1393

در این مقاله در مورد MongoDB و چگونگی‌ کار با MongoDB به وسیله #C مطالبی‌ را می‌‌آموزیم.هم چنین در مورد ارتباط با server ، گرفتن refrence برای database ، ایجاد یک insert ،Collection کردن به query ،Collection گرفتن از Collection و غیره مطالبی‌ را آموزش میدهیم.

چگونگی‌ کار با MongoDB به وسیله #C
در این مقاله چگونگی کار با MongoDB را با استفاده از #C  توضیح میدهیم.
این مقاله به شما کمک می کند تا بیاموزید چگونه به سرور وصل شوید،db ایجاد کنید ،collection ایجاد کنید، به collection یک document اضافه کنید ویا آن را remove کنید،query بگیرید و غیره.
برای کار با MongoDB   باید درایور  c# MongoDB  را کهMongoDB را support  می  کند دانلود کنید.
کار با MongoDB مثل کار با linq و Entity Framework است و ویژگی های مشابه linq را دارد.این یکی از بزرگترین ویژگی های  MongoDBاست.
Driver Line:
https://github.com/mongodb/mongo-csharp-driver/releases
شروع میکنیم:
قبل از کدنویسی ابتدا درایور را دانلود کنید و بعدrefrence دو فایلdll  روبرو به نامهای MongoDB BOSON و MongoDbdriver را add کنید و از refrence های namespace های زیر استفاده کنید:
    using MongoDB.Bson;  
    using MongoDB.Driver;  
    using MongoDB.Driver.Builders;  
    using MongoDB.Driver.GridFS;  
    using MongoDB.Driver.Linq;  

Syntax های connection string

Connection String پیش فرض: "mongodb://localhost"
این Connection String به local server پیش فرض با پورت 27017 وصل میشود،شما میتوانید کانکشن انتخابی خودتان را داشته باشید مثلا : "mongodb://192.162.1.xx:27017".


ایجاد Client


    MongoClient client = new MongoClient(connectionString);  


همانند درخواست sql connection شما یک MongoDB client ایجاد می‌کنید،کد بالا یک شی از Mongoclient ایجاد می‌کند که connection string را به عنوان یک پارامتر می‌گیرد.

گرفتن server Refrence


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


کد بالا refrence را از Mongo server می‌گیرد،متد ()GetServer را از MongoClient صدا می زند . این متد object‌های MongoServer را برمی‌گرداند.


گرفتن Database refrence
برای ایجاد Mongo Database و گرفتن یک Collection (همان table در SQL) این جایی است که data در آن ذخیره میشود :


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


این کد متد GetDatabase را صدا میزند تا refrence را از MongoDatabase بگیرد.متد GetDatabase نام سرور را به عنوان یک پارامتر می‌گیرد.اگر database وجود نداشته باشد،mongodb یک database با یک نام مشخص (در پارامتر) ایجاد می‌کند و database را برمی‌گرداند.
در این کود سعی شده که refrence را از database ای به نام test بگیرد.

گرفتن refrence از Collection


یک پایگاه داد MongoDB مانند SQL Server ،برای ذخیرهٔ داده یک Collection دارد.برای گرفتن refrence از Collection, باید متد GetCollection از MongoDB صدا زده شود.

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


متد GetCollection symbol را به عنوان پارامتر برمی‌دارد و refrence آن Collection را بر می‌گرداند.همانند متد GetDatabase, متد GetCollection هم collection ایجاد می‌کند.اگر collection موجود نباشد ،نام تعیین شده, یک پارامتر است. در اینجا symbol یک شی است که type این  collection را تعیین می‌کند.

گرفتن refrence از Collection List
یک List از MongoColletion میتواند به وسیلهٔ متد GetCollection هم فراخوانی شود،که تمام collection‌های قابل دسترس در database را در یک لیست بر میگرداند.


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

Drop کردن Collection‌ها از Database


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


متد DropCollection از کلاس Mongo Database ،collection ای‌ که اسمش رو در پارامتر آورده ایم را از database پاک می‌کند.

insert کردن به Collection


    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 یک کلاس است،کد بالا یک object از symbol را در   insert ،collection می‌کند.در ادامه id ای‌ را می‌بینید که type آن ObjectID است.در کد بالا property برای id مشخص نشده چون دلبخواه است،اگر شما collection ای‌ از MongoDb مشخص نکرده باشید،مثل جدول در SQL ، به صورت اتوماتیک یک شماره id به آن داده میشود. همانند تشکیل اتوماتیک ستون id در جدول SQL Server .

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


Query گرفتن از Collection
Query گرفتن لیستی از داد ها


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


همانند query گرفتن از یک داده:

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



save کردن داده در Collection


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


متد Save  در document ، MongoDBcollection  موجود را ذخیره می کند.
به عنوان مثال، فکر کنید می‌خواهید تمام ستون‌های table موجود را تغییر بدهید و تغییرات را save کنید،پس نیاز دارید که از متد Save کمک بگیرید.

Update کردن داده ها
تفاوت بین save و update این است که save تمام document را به server برمی‌گرداند ، اما update فقط تغییرات را به server برمی‌گرداند. متد update پارامتر می‌گیرد.

به عنوان مثال : فکر کنید نیاز دارید که بعضی‌ از ستون‌های table را تغییر دهید و فقط ستونی که مقدارش update شده است را به server بفرستید ، در این حالت شما نیاز دارید که از متد update در MongoDB Collection استفاده کنید.

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 کردن داده از Collection
برای remove کردن document موجود از collection ، متد Remove به شما کمک می‌کند. این متد یک شی از entity را به عنوان پارامتر می‌گیرد.



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


برای remove کردن تمام داد‌ها از  Collection:

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

صبا ذاکر

نویسنده 18 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 11 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید