استفاده از ديتابيس MongoDB
شناسه پست: 1586
بازدید: 1962

چکیده: استفاده از پایگاه داده MongoDB با Web API و ASP.NET Core برای عملیات CRUD

 

 

MongoDB یک پایگاه داده مبتنی بر سند از نوع NoSQL میباشد که با استفاده از آن میتوانید مستندات مبتنی بر JSON ایجاد نمایید که مستقل از schema هستند. در اینجا schema میتواند با جداول در یک پایگاه داده رابطه ای map شود. یک schema در MongoDB یک collection نامیده میشود و یک رکورد در این schema،سند (document) نامیده میشود.

در وب اپلیکیشن های مدرن اوپن سورس، استفاده از یک پایگاه داده NoSQL به دلیل رفتار غیررابطه ای، محبوبیت زیادی دارد. در این مقاله، ما قصد داریم با استفاده از ASP.NET Core، یک Web API ایجاد نماییم که عملیات CRUD را روی یک collection ایجاد مینماید. نمودار زیر، پیاده سازی این اپلیکیشن را شرح میدهد:

طراحی پروژه با دیتابیس MongoDB

مزیت Web API این است که میتواند به عنوان سرویسهای HTTP مورد استفاده قرار بگیرد و به هر نوع اپلیکیشن سرویس گیرنده ای از دسکتاپ تا دستگاه های موبایل سرویس ارائه دهد. این اپلیکیشن های سرویس گیرنده با استفاده از Web API به عنوان یک رسانه، میتوانند به آسانی با یک پایگاه داده NoSQL مانند MongoDB ارتباط برقرار نمایند.

Web API و MongoDB – پیاده سازی

شما MongoDB را برای ایجاد collection ها و ذخیره اسناد درآن نیاز دارید. MongoDB را میتوانید از این لینک دانلود نمایید. دیتابیس را نصب نمایید. زمانی که نصب تمام شد، درایو سیستم، یک پوشه MongoDB  در مسیر زیر ایجاد مینماید:

C:\Program Files\MongoDB

 

ما باید یک پوشه برای ذخیره داده ها ایجاد نماییم. من بر روی سیستم خودم مسیر E:\MongoDbData\data را ایجاد کرده ام.

Command prompt را باز کنید و به پوشه زیر navigate کنید:

C:\Program Files\MongoDB\Server\3.2\bin


و دستور را مانند شکل زیر اجرا نمایید:

دستور MongoDB

این دستور باعث اتصال به MongoDB بر روی پورت 27017 میشود.

یک پنجره دیگری از command prompt را باز کنید و به پوشه bin بروید و سپس دستور زیر را اجرا کنید:

دستور Mongo

این دستور به دیتابیس پیشفرض test وصل میشود. دستور زیر را اجرا کنید (command prompt)

> use EmployeeDB

 

این دستور، یک دیتابیس به نام EmployeeDB اگر از قبل وجود نداشته باشد ایجاد میکند در غیر اینصورت آن را برای انجام تراکنشها باز میکند. در این دیتابیس، ما میتوانیم با استفاده از دستور زیر، تراکنش ایجاد نماییم:

db.createCollection('Products')


Schema برای کالکشن Products، با استفاده از دستور زیر در command prompt میتواند تعریف شود:

db.Products.insert({'ProductId':1,'ProductName':'Desktop All in One','Price':43000,'Category':'Electronics'})

 

دستور زیر را اجرا کنید:

>db.Products.find({})

 

نتیجه به صورت زیر نمایش داده خواهد شد:

نتیجه دستور find در C:\Program Files\MongoDB\Server\3.2\bin

schema، ویژگی id_ را اضافه میکند. این ویژگی یک ObjectId  است که به صورت خودکار تولید میشود.

حال، از آنجایی که کالکشن و دیتابیس آماده است، ما میتوانیم یک اپلیکیشن Web API ایجاد نماییم.

ایجاد اپلیکیشن MongoDB 

ما از Visual Studio 2015 برای ایجاد این اپلیکیشن استفاده میکنیم. ما باید ASP.NET Core را نصب نماییم که میتوانید آن را از این لینک دانلود نمایید.

مرحله 1: ویژوال استودیو را باز کنید و یک ASP.NET Core Web Application جدید همانند شکل زیر بسازید:

ایجاد پروژه asp.net core

نام این اپلیکیشن را MVC6_WEBAPI_MongoDB بگذارید. روی OK  کلیک کنید که در نتیجه پنجره ASP.NET Templates نمایش داده میشود. مانند شکل زیر، Web API را انتخاب کنید:

تمپلیت webapi در asp.net mvc

در نتیجه یک پروژه از نوع Web API ایجاد میشود.

مرحله 2: فایل project.json را باز کنید و در قسمت dependencies، پکیج dependency زیر را اضافه کنید:

"mongocsharpdriver": "2.3.0"


پروژه را ذخیره کنید تا درایور Mongo CSharp در سیستم نصب شود.

مرحله 3: در پروژه، پوشه Models را اضافه کنید. در این پوشه، یک کلاس جدید به نام Product.cs ایجاد نمایید. سپس کد زیر را در این کلاس اضافه کنید:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
 
namespace MVC6_WEBAPI_MongoDB.Models
{
    public class Product
    {
        public ObjectId Id { get; set; }
        [BsonElement("ProductId")]
        public int ProductId { get; set; }
        [BsonElement("ProductName")]
        public string ProductName { get; set; }
        [BsonElement("Price")]
        public int Price { get; set; }
        [BsonElement("Category")]
        public string Category { get; set; }
    }
}


این کلاس، ویژگی Id از نوع ObjectId را شامل میشود. این ویژگی الزامی میباشد طوریکه آبجکت CLR میتواند با Collection  در MongoDB مپ گردد. این کلاس شامل خصوصیات به همراه ویژگی BsonElement بر روی آنها میباشد. این attribute، نمایانگر این است که ویژگی با کالکشن MongoDB مپ شده میباشد.

مرحله 3: فایل کلاس DataAccess.cs را در پوشه Models  به همرا کد زیر اضافه کنید:

using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using System.Collections.Generic;
 
namespace MVC6_WEBAPI_MongoDB.Models
{
    public class DataAccess
    {
        MongoClient _client;
        MongoServer _server;
        MongoDatabase _db;
 
        public DataAccess()
        {
            _client = new MongoClient("mongodb://localhost:27017");
            _server = _client.GetServer();
            _db = _server.GetDatabase("EmployeeDB");     
        }
 
        public IEnumerable<Product> GetProducts()
        {
            return _db.GetCollection<Product>("Products").FindAll();
        }
 
 
        public Product GetProduct(ObjectId id)
        {
            var res = Query<Product>.EQ(p=>p.Id,id);
            return _db.GetCollection<Product>("Products").FindOne(res);
        }
 
        public Product Create(Product p)
        {
            _db.GetCollection<Product>("Products").Save(p);
            return p;
        }
 
        public void Update(ObjectId id,Product p)
        {
            p.Id = id;
            var res = Query<Product>.EQ(pd => pd.Id,id);
            var operation = Update<Product>.Replace(p);
            _db.GetCollection<Product>("Products").Update(res,operation);
        }
        public void Remove(ObjectId id)
        {
            var res = Query<Product>.EQ(e => e.Id, id);
            var operation = _db.GetCollection<Product>("Products").Remove(res);
        }
    }
}


کد بالا از کلاسهای زیر استفاده میکند:

MongoServer – ارائه دهنده یک instance از MongoDB Server میباشد.

MongoClient – این کلاس برای خواندن instance از سرور برای انجام عملیات روی دیتابیس مورد استفاده قرار میگیرد. سازنده این کلاس با رشته اتصال MongoDB زیر پاس داده شده است:

"mongodb://localhost:27017"


MongoDatabase – این ارائه دهنده دیتابیس Mongo برای انجام عملیات است. این کلاس، متدهای زیر را ارائه میدهد:

  • GetCollection<T>(collection)
  • . T آبجکت CLR است که collection میباشد.
  • . این متد MongoCollection را برمیگرداند.
  • متدها
  • FindAll() – تمام سندها در collection را برمیگرداند.
  • FindOne() – یک سند مبتنی بر اساس  _id را با استفاده از کوئری Mongo  برمیگرداند.
  • Save() – یک سند جدید را در collection ذخیره میکند.
  • Update() – یک سند را آپدیت میکند.
  • Remove() – یک سند را حذف میکند.

کد بالا از تمام این متدها برای عملیات CRUD استفاده میکند.

مرحله 4: ما کلاس DataAccess را در ویژگی Dependency Injection ارائه شده در ASP.NET Core، ثبت میکنیم. برای این امر، فایل Startup.cs  را باز کنید و خط زیر را در متد ()ConfigureServices اضافه نمایید:

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<DataAccess>();
    services.AddMvc();
}


مرحله 5: در پوشه Controllers ، یک Web API Controller جدید به نام ProductAPIController  همانند شکل زیر ایجاد نمایید:

اضافه کردن کنترلر web api

در این کلاس، کد زیر را اضافه نمایید:

using System.Collections.Generic;
using Microsoft.AspNet.Mvc;
 
using MVC6_WEBAPI_MongoDB.Models;
using MongoDB.Bson;
 
namespace MVC6_WEBAPI_MongoDB.Controllers
{
    [Route("api/Product")]
    public class ProductAPIController : Controller
    {
        DataAccess objds;
 
        public ProductAPIController()
        {
            objds = d;
        }
 
        [HttpGet]
        public IEnumerable<Product> Get()
        {
            return objds.GetProducts();
        }
        [HttpGet("{id:length(24)}")]
        public IActionResult Get(string id)
        {
            var product = objds.GetProduct(new ObjectId(id));
            if (product == null)
            {
                return NotFound();
            }
            return new ObjectResult(product);
        }
 
        [HttpPost]
        public IActionResult Post([FromBody]Product p)
        {
            objds.Create(p);
            return new HttpOkObjectResult(p);
        }
        [HttpPut("{id:length(24)}")]
        public IActionResult Put(string id, [FromBody]Product p)
        {
            var recId = new ObjectId(id);
            var product = objds.GetProduct(recId);
            if (product == null)
            {
                return HttpNotFound();
            }
            
            objds.Update(recId, p);
            return new OkResult();
        }
 
        [HttpDelete("{id:length(24)}")]
        public IActionResult Delete(string id)
        {
            var product = objds.GetProduct(new ObjectId(id));
            if (product == null)
            {
                return NotFound();
            }
 
            objds.Remove(product.Id);
            return new OkResult();
        }
    }
}


کلاس Web API بالا از کلاس DataAccess برای عملیات CRUD  استفاده میکند. این کلاس Web API شامل متدهای GET, POST, PUT و DELETE برای عملیات Http میباشد.

مرحله 5: launchSettings.json را در پوشه Properties  باز کنید و تنظیمات زیر را در آن قرار دهید:

"profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/Product",
      "environmentVariables": {
        "Hosting:Environment": "Development"
      }
    }


این قطعه کد، launchUrl را برای اجرای اپلیکیشن در IIS Express تعیین میکند.

اپلیکیشن را در مرورگر اجرا نمایید. نتیجه به شکل زیر نمایش داده خواهد شد:

نتیجه json

برای تست ما از ابزار Fiddler استفاده میکنیم. ابزار Fiddler را باز کنید و URL زیر را در آن وارد نمایید:

استفاده از Fiddler

روی دکمه Execute کلیک کنید و نتیجه به صورت زیر نمایش داده میشود:

نتیجه fiddler

برای Post  کردن داده ها، جزییات زیر را در Fiddler وارد نمایید:

post کردن داده ها در Fiddler

روی دکمه Execute  کلیک کنید تا داده ها ارسال شوند. دستور زیر را از Mongo Command prompt اجرا نمایید:

>db.Products.find({})

 

نتیجه به صورت زیر نمایش داده میشود:

نحوه ارسال داده ها در Fiddler

نتیجه گیری: با استفاده از درایور #Mongo c ما میتوانیم به راحتی به دیتابیس محبوب MongoDB برای عملیات CRUD  متصل شویم. با استفاده از ASP.NET WebAPI، داده های MongoDB  به راحتی میتواند برای تمام اپلیکیشنهای سرویس گیرنده جهت ذخیره و خواندن داده ها در دسترس قرار بگیرد.

برای دانلود سورس برنامه اینجا کلیک نمایید.

نویسنده

امید عباسی
من امید عباسی هستم. سالهاست که در زمینه برنامه نویسی با تکنولوژی دات نت فعالیت میکنم و عاشق این هستم که تجربیات و دانش خودم را در این زمینه با دیگران به اشتراک بزارم. خیلی دوست دارم که نظر و انتقاد خودتون رو در مورد این نوشته برای من بنویسید تا بتونم در آینده، مطالب بهتر و ارزشمندتری را برای شما فراهم کنم. در صورت داشتن هرگونه سوال هم در قسمت دیدگاه ها میتونید با بنده در ارتباط باشید