عملیات CRUD با استفاده از MongoDB در NET.
یکشنبه 9 آبان 1395MongoDB یک بانک اطالاعاتی OpenSource سند گرا است . و از نوع بانک های اطلاعاتی NoSQL به حساب می آید و داده ها را در فرمت JSON ذخیره می کند (محتوای آن داخل فرمت BSON ذخیره می شوند ). در ادامه عملیات CURD را با استفاده از MongoDB پیاده سازی می کنیم .
زمینه
با استفاده از پکیجی که تیم 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"));
- C#.net
- 2k بازدید
- 2 تشکر