MongoDB is a NoSQL document-oriented database that allows you to define JSON based documents which are schema independent. The schema can be mapped with Tables in a Relational Database. A schema in MongoDB is called as collection, and a record in this schema is called as document

Download an ASP.NET MVC CMS - Free Trial

In open source modern web applications, the use of a NoSQL database is gaining popularity due to its non-relational behavior. In this demo, we will create a Web API using ASP.NET Core which will perform CRUD Operations on a collection. The following diagram explains the implementation of the application.

The advantage of a Web API is that it can be used as HTTP services and can be subscribed by any client application ranging from Desktop to Mobiles. Using Web API as a medium, these client apps can easily interact with a NoSQL database like MongoDB.

Web API and MongoDB - The Implementation

We need MongoDB for creating collections and storing documents in it. MongoDB can be downloaded from this link. Install the database. Once the installation is over, the system drive will create a MongoDB folder in the following path

C:\Program Files\MongoDB

We also need to create a data folder where the data will be stored. On my machine I have created E:\MongoDbData\data

Open the Command prompt and navigate to the following folder

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

and run the command as shown in the following image

This will connect to MongoDB on port 27017.

Open another instance of the command prompt and navigate to the bin folder and run the following command

This will connect to the default test database. Run the following command on > (command prompt)

> use EmployeeDB

This will create a database of name EmployeeDB if it does not exist already, else it will be opened for transactions if the database already exists. In this database we can create transaction using the following command

db.createCollection('Products')

The Schema for the Products collection can be defined using following command from the command prompt

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

Run the following command

>db.Products.find({})

The following result will be displayed

The schema will add _id property. This property will be an ObjectId which will be generated automatically.

Now since the database and collection is ready, we can create a Web API application. Please visit this link to read about creating Web API using MVC 6.

Creating the MongoDB Application

We will be using Visual Studio 2015 for creating this application. We need to install ASP.NET Core which can be downloaded from this link.

Step 1: Open Visual studio and create a new ASP.NET Web Application as shown in the following image

Name this application as MVC6_WEBAPI_MongoDB. Click on the OK button which will open the following window which shows ASP.NET Templates. Select Web API as shown in the following image

This will create a Web API project.

Step 2: Open the project.json file and in the dependencies section, add the following package dependency:

"mongocsharpdriver": "2.3.0"

Save the project and the Mongo CSharp driver will be installed for the project.

Step 3: In the project add the Models folder, in this add a new class file of name Product.cs. Add the following code in this file

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; }
    }
}

The class contains Id property of the type ObjectId. This property is mandatory so that the CLR object can be mapped with Collection in MongoDB. The class contains properties having the BsonElement attribute applied on it. This represent the mapped property with the MongoDB collection.

Step 3: Add the DataAccess.cs class file in the Models folder with the following code in it

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);
        }
    }
}

The above code uses the following classes:

MongoServer - This represents an instance of the MongoDB Server.

MongoClient - This class is used to read the server instance for performing operations on the database. The constructor of this class is passed with the MongoDB Connection string as shown in the following box

"mongodb://localhost:27017"

MongoDatabase - This represents Mongo Database for performing operations. This class provides following methods

  • GetCollection<T>(collection)
  • · T is the CLR object to be collection.
  • · This returns MongoCollection.
  • Methods
  • FindAll() - Returns all documents in collection()
  • FindOne() - Returns a single document based on Mongo Query object generated based on _id.
  • Save() - Save a new document in collection.
  • Update() - Update a document.
  • Remove() - Remove a document.

The above code uses all these methods for performing CRUD operations.

Step 4: We will register the DataAccess class in the Dependency Injection feature provided by the ASP.NET Core. To do this open the Start.cs file and add the following line in ConfigureServices() method

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

Step 5: In the Controllers folder, add a new Web API Controller class of name ProductAPIController as shown in the following image

In this class add the following code

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();
        }
    }
}

The above Web API class uses DataAccess class for performing CRUD operations. The Web API class contains GET, POST, PUT and DELETE methods for Http operations.

Step 5: Open the launchSettings.json in the Properties folder and add the following settings in it:

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

This provides launchUrl to run the application in IIS Express.

Run the application in browser and the following result will be displayed:

To Test this we will make use of Fiddler tool. Open the fiddler tool and enter the following URL in it

Click on Execute button and the following result will be displayed

To Post the data, enter the following details in Fiddler

Click on Execute button and the data will be posted. Run the following command from the Mongo Command prompt

>db.Products.find({})

The following result will be displayed

Conclusion: Using Mongo C# Driver we can easily connect to the popular MongoDB database and perform CRUD operations. Using ASP.NET WebAPI,  MongoDB data can be easily made available to various client apps for storing and reading data.

Download the source code of this article (Github)

Using MongoDB with Web API and ASP.NET Core的更多相关文章

  1. 002.Create a web API with ASP.NET Core MVC and Visual Studio for Windows -- 【在windows上用vs与asp.net core mvc 创建一个 web api 程序】

    Create a web API with ASP.NET Core MVC and Visual Studio for Windows 在windows上用vs与asp.net core mvc 创 ...

  2. 【翻译】使用Knockout, Web API 和 ASP.Net Web Forms 进行简单数据绑定

    原文地址:http://www.dotnetjalps.com/2013/05/Simple-data-binding-with-Knockout-Web-API-and-ASP-Net-Web-Fo ...

  3. Asp.Net Web API VS Asp.Net MVC

    http://www.dotnet-tricks.com/Tutorial/webapi/Y95G050413-Difference-between-ASP.NET-MVC-and-ASP.NET-W ...

  4. ASP.NET Web API和ASP.NET Web MVC中使用Ninject

    ASP.NET Web API和ASP.NET Web MVC中使用Ninject 先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.Web ...

  5. Knockout, Web API 和 ASP.Net Web Forms 进行简单数据绑定

    使用Knockout, Web API 和 ASP.Net Web Forms 进行简单数据绑定   原文地址:http://www.dotnetjalps.com/2013/05/Simple-da ...

  6. Web API 2 入门——使用Web API与ASP.NET Web窗体(谷歌翻译)

    在这篇文章中 概观 创建Web窗体项目 创建模型和控制器 添加路由信息 添加客户端AJAX 作者:Mike Wasson 虽然ASP.NET Web API与ASP.NET MVC打包在一起,但很容易 ...

  7. 004.Create a web app with ASP.NET Core MVC using Visual Studio on Windows --【在 windows上用VS创建mvc web app】

    Create a web app with ASP.NET Core MVC using Visual Studio on Windows 在 windows上用VS创建mvc web app 201 ...

  8. Web API 基于ASP.NET Identity的Basic Authentication

    今天给大家分享在Web API下,如何利用ASP.NET Identity实现基本认证(Basic Authentication),在博客园子搜索了一圈Web API的基本认证,基本都是做的Forms ...

  9. 在ASP.NET Web API和ASP.NET Web MVC中使用Ninject

    先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.WebUI的空MVC应用程序 3.使用NuGet安装Ninject库   二.在ASP.N ...

随机推荐

  1. GitHub存储库泄露了API令牌和加密密钥

    导读 北卡罗莱纳州立大学(NCSU)学者的一项研究表明,一些GitHub存储库泄漏API令牌和密码密钥.研究人员分析了分布在数百万存储库中的10亿多个GitHub文件.研究人员使用GitHub搜索AP ...

  2. Python爬虫 获得淘宝商品评论

    自从写了第一个sina爬虫,便一发不可收拾.进入淘宝评论爬虫正题: 在做这个的时候,也没有深思到底爬取商品评论有什么用,后来,爬下来了数据.觉得这些数据可以用于帮助分析商品的评论,从而为用户选择商品提 ...

  3. Java验证工具类

    在项目中使用Java经常有验证功能的使用,比如手机号,密码等验证. 总结一下,写出个工具类方便以后用的时候直接引. package com.common.utils; import org.apach ...

  4. 拉格朗日乘子法(Lagrange Multiplier)和KKT条件

    拉格朗日乘子法:对于等式约束的优化问题,求取最优值. KKT条件:对于含有不等式约束的优化问题,求取最优值. 最优化问题分类: (1)无约束优化问题: 常常使用Fermat定理,即求取的导数,然后令其 ...

  5. 《Spring Boot 入门及前后端分离项目实践》目录

    开篇词:SpringBoot入门及前后端分离项目实践导读 第02课:快速认识 Spring Boot 技术栈 第03课:开发环境搭建 第04课:快速构建 Spring Boot 应用 第05课:Spr ...

  6. DSSM:深度语义匹配模型(及其变体CLSM、LSTM-DSSM)

    导语 在NLP领域,语义相似度的计算一直是个难题:搜索场景下Query和Doc的语义相似度.feeds场景下Doc和Doc的语义相似度.机器翻译场景下A句子和B句子的语义相似度等等.本文通过介绍DSS ...

  7. 基于linux下的krpano的使用

    鉴于目前网络上关于krpano的使用和介绍少之又少,结合自己的学习和使用经历,做个总结和记录. 1.安装 下载地址: linux https://krpano.com/forum/wbb/index. ...

  8. 二十二:制作app的时候超出部分不能滑动

    给需要滑动的区域写以下样式(父级是浏览器) position: absolute; left: 0; right: 0; bottom: 0; top: 0; overflow-x: hidden; ...

  9. 阿里巴巴2017实习生招聘模拟题(部分)---C++后台开发方向

    1.一个机器人玩抛硬币的游戏,一直不停的抛一枚不均匀的硬币,硬币有A,B两面,A面的概率为3/4,B面的概率为1/4.问第一次出现连续的两个A年的时候,机器人抛硬币的次数的期望是多少? 9/4 11/ ...

  10. Iar8.1安装包破解

    Iar8.1安装包链接链接:https://pan.baidu.com/s/1F6sxEcatk3_YPq47lvc8Mw 密码:mnlz 破解链接  https://www.cnblogs.com/ ...