عملیات CRUD با استفاده از MongoDB در NET.

یکشنبه 9 آبان 1395

MongoDB یک بانک اطالاعاتی OpenSource سند گرا است . و از نوع بانک های اطلاعاتی NoSQL به حساب می آید و داده ها را در فرمت JSON ذخیره می کند (محتوای آن داخل فرمت BSON ذخیره می شوند ). در ادامه عملیات CURD را با استفاده از MongoDB پیاده سازی می کنیم .

عملیات CRUD با استفاده از MongoDB در NET.

زمینه

با استفاده از پکیجی که تیم MongoDB در nuget قرار داده اند میتوان آن را برای انجام عملیات CURD تعریف کنیم . این پکیج شما کلاس های از پیش تعریف شده اند که از آن ها استفاده می کنیم .

استفاده از کد

برای شروع کار به پکیچ های Nuget نیاز داریم ، بنابراین پکیج های زیر را بروی پروژه خود نصب کنید :

1. MongDB.Bson

2. MongoDB.Driver

3. MongoDB.Driver.Core

کلاس هایی که در این پکیج ها قرار دارند ،  باز و بسته شد connection  pool را برقرار می کنند و ... .

بنابر این  کد های .NET  که نوشته ایم خوانا تر خواهند بود . BSON  مخفف Binary JSON است ، یک ترکیب باینری و کد گذاری شده JSON می باشد . JSON   و BSON از آرایه ها و اسناد دیگر پشتیبانی می کنند .

ایجاد (افزودن) Document :

برای درج یک سند میتوان از قطعه کد زیر استفاده کنید . توجه داشته باشید که نمونه MongoDB باید اول برنامه اجرا شود . همچنین میتوان رشته اتصال MongoDB را تغییر دهید . در این قسمت ما در حال دریافت بانک اطلاعاتی از MongoDB  هستیم و یک BsonDocument را به جدول people اضافه می کنیم .

زمانی که به  نوع  جدول ایجاد شده  شک داشتید میتوانید از نوع BSONDocument استفاده کنید . بعد از این که یک Document ایجاد کردید میتوان با فراخوانی متد InsertOneAsync  اطلاعاتی را به آن اضافه کنید . این متد تنها یک document به جدول اضافه می کند .

    
        static async Task MainAsync(string[] args)
        {
            var ConnectionString = "mongodb://localhost:27017";

            var client = new MongoClient(ConnectionString);
            var db = client.GetDatabase("test");

            var col = db.GetCollection<BsonDocument>("people");

            var doc = new BsonDocument
            {
                {"Name" ,"test" },
                { "Age" ,  33 }
            };

            await col.InsertOneAsync(doc);

        }

برای افزودن document های بیشتر میتوان از کد زیر استفاده کنید . در زیر دو BsonDocument  ایجاد کرده ایم و آنها را با استفاده از متد InsertManyAsync  به جدول اضافه کرده ایم .

    static async Task MainAsync(string[] args)
        {
            var ConnectionString = "mongodb://localhost:27017";

            var client = new MongoClient(ConnectionString);
            var db = client.GetDatabase("test");

            var col = db.GetCollection<BsonDocument>("people");

            var doc = new BsonDocument
            {
                {"Name" ,"test" },
                { "Age" ,  33 }
            };

            var doc2 = new BsonDocument
            {
                { "Name" , "Hi"},
                {"Profession" , "PM" }

            };

            await col.InsertManyAsync(new[] { doc, doc2 });

        }

به جای BsonDocument میتوان کلاس از نوع document نیز اضافه کنید . برای این کار شما نیاز به ایجاد کلاسی از نوع  doucument دارید و آن را مانند کد های قبلی اضافه کنید .

بازیابی Document

برای این کار شما دو راه دارید . ابتدا از cursor استفاده کنید که باید این میتوان بسیار مفید باشد. Cursor چگونه driver MongogDB را ارسال می کند و سرور آن ها را به صورت دسته شده بر می گرداند. کد زیر مجموعه ای از people ها است :

static async Task MainAsync(string[] args)
        {
            var ConnectionString = "mongodb://localhost:27017";

            var client = new MongoClient(ConnectionString);
            var db = client.GetDatabase("test");

            var col = db.GetCollection<BsonDocument>("people");

            using (var cursor  = await col.Find(new BsonDocument()).ToCursorAsync())
            {
                while (await cursor.MoveNextAsync()) //Cursor maintain the batch size here.
                {
                    foreach (var doc in cursor.Current)////represent the current document in the cursor
                    {
                        Console.WriteLine(doc);
                    }
                }
            }
       }

تا این قسمت از کار یکی از راه های دریافت اطلاعات را از بانک اطلاعاتی   مشاهده کردیم  که بسیار ساده ، تمیز ، سریع است . در این حالت تمامی document ها در حافظه نگه داری می شوند بنابراین  این عمل برای برخی از سناریو ها میتواند بیهوده باشد اما زمانی که میدانید تعداد doucument های شما در مجموعه چقدر است میتواند مفید باشد .


static async Task MainAsync(string[] args)
         {
            var ConnectionString = "mongodb://localhost:27017";

            var client = new MongoClient(ConnectionString);
            var db = client.GetDatabase("test");

            var col = db.GetCollection<BsonDocument>("people");

            var list = await col.Find(new BsonDocument()).ToListAsync();

            foreach (var doc in list)
            {
                Console.WriteLine(doc);
            }

        }

 

دو روش بالا  به شما نشان می دهد که چگونه می توانید مجموعه از تمامی document ها را بازیابی کنید . اگر شما میخواهید document خاصی را بازیابی کنید میتوان از filter  استفاده کنید و آن ها را برگردانید  و آن یک کلاس builder helper است که با استفاده از آن میتوان یک Filter ایجاد کنید .

Update

این روش دو نوع مجزا دارد یکی از آن ها Replace است و دیگری Update . بنابراین ابتدا مشاهده می کنید که چگونه می توان در MongoDB mdocument ها را  Replace کرد . زمانی که doucument ها را Replace می کنیم نمیتوان فیلد Id آنها را جا به جا کنیم .

    static async Task MainAsync(string[] args)
      {
         var ConnectionString = "mongodb://localhost:27017";
         var client = new MongoClient(ConnectionString);
         var db = client.GetDatabase("test");

         var col = db.GetCollection<BsonDocument>("people");
            
         await col.ReplaceOneAsync(new BsonDocument("name", "Simon"), new BsonDocument("name", "Juli"));

         await col.Find(new BsonDocument()).ForEachAsync(X => Console.WriteLine(X));
      }

در کد بالا میخواهیم در  مجموعه people  نام Simon را با نام Juli  تغییرداده یا Replace کنیم .

در قسمت زیر نمونه کد دیگری از حالت  Update کردن یک رکورد را مشاهده می کنید . در کد زیر شخصی که نامش Simon باشد را دریافت می کنیم و  سن آن را 10  قرار می دهیم .

static async Task MainAsync(string[] args)
        {
            var ConnectionString = "mongodb://localhost:27017";

            var client = new MongoClient(ConnectionString);
            var db = client.GetDatabase("test");

            var col = db.GetCollection<BsonDocument>("people");

            await col.UpdateOneAsync(Builders<BsonDocument>.Filter.Eq("name", "Simon"),
                Builders<BsonDocument>.Update.Inc("Age", 10));

            await col.Find(new BsonDocument()).ForEachAsync(X => Console.WriteLine(X));
        }

راه های دیگری نیز برای این عمل وجود دارد به عنوان مثال میتوان از متد UpdateManyAsynce استفاده کنید .

Delete

در این قسمت دو متد برای حذف کردن رکوردها از MongoDB وجود دارد ، متد DeleteManyAsync و DeleteOneAsync .

همان طور که از نام آن ها معلوم است اولی برای حذف یک رکورد به کار می رود و دومی برای حذف چند رکورد به کار می رود .

در مثال زیر رکوردی  که نامش با Simon یکی باشد آن را حذف خواهد کرد .

await col.DeleteOneAsync(Builders<BsonDocument>.Filter.Eq("name" ,"test1"));

آموزش سی شارپ

آموزش mongodb

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 1k بازدید
  • 2 تشکر

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

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