Home  >  Article  >  Backend Development  >  Learn the complete steps to integrate MongoDB with asp.net core

Learn the complete steps to integrate MongoDB with asp.net core

coldplay.xixi
coldplay.xixiforward
2020-07-18 16:47:082767browse

Learn the complete steps to integrate MongoDB with asp.net core

##1. Preface and introduction to MongoDB##Recently While integrating my own framework, I refactored the simplest CRUD of MongoDBD as a component and integrated it into the asp.net core project. Of course, this article does not explain the cluster deployment of mongodb. I will share it when I have the opportunity.

First of all, we see in MongoDB’s official documentation that MongoDb’s 2.4 or above For .Net driver supports .Net Core 2.0.


Regarding MongoDB, I think everyone should be familiar with it, and have heard of it even if they have not used it.

Related learning recommendations:
ASP.NET video tutorial

#1. What is mongodb?

MongoDB is a database based on distributed file storage. It provides scalable and high-performance data storage solutions for web applications. It is a product between relational database and non-relational database. It is non-relational. The most feature-rich database. It is a powerful tool for data processing.

2. What are relational databases and non-relational databases?

Relational database: The sqlserver, mysql, etc. we have used are all relational databases, and relational databases follow the ACID principle and have strict consistency.

Non-relational database: Also called NoSQL, it is used to store very large-scale data. These types of data storage do not require a fixed model and can be expanded horizontally without redundant operations.

3. RDBMS VS NoSQL

RDBMS:

Highly organized structured data

Structured query language

Data and relationships are stored in separate tables

Strict consistency

Basic transactions

NoSQL:

No declarative query language

Key-value pair storage, column storage, document storage, etc.

Eventual consistency

Unstructured and unpredictable data

CAP theorem, high availability, High performance, high scalability

I believe that at this point, sharp-eyed students should have noticed the CAP theorem and eventual consistency, and will definitely think of distributed systems. I give you a big thumbs up here. It can be perfectly combined with nosql in a distributed system to improve our performance.

4. Introduce some concepts of RDBMS and Mongodb, which will help everyone understand

Translate, as follows:

2. Asp.net core integrates mongoDB

1. For the convenience of demonstration I downloaded the windows version of mongodb server

You can go to the official website to download it yourself, and then for the visual interface, I used the tool Robo 3T. A very simple and beautiful visualization tool. Recommended for everyone to use.

After the installation is completed, you will see the mongodb server in the windows service

Then we open Robo 3T and connect our mongodb.

2. Let’s start configuring our mongodb in the project

The first step: I create a new Core2 .0 class library

introduces the "MongoDB.Driver" nuget package.

Then extended the extension method of Services in Startup.cs

//扩展方法public static class ServiceCollectionExtensions
 {
 public static void AddMongoDB(this IServiceCollection services, IConfiguration configuration)
 {
  services.Configure<Settings>(options =>
  {
  options.ConnectionString = configuration.GetSection("MongoConnection:ConnectionString").Value;
  options.Database = configuration.GetSection("MongoConnection:Database").Value;
  });
 }
 }

The second step: Refactor the CRUD class that encapsulates mongodb. You can encapsulate it yourself here and only display it. Search and add.

public class MongoDBBase
 {
 private readonly IMongoDatabase _database = null;
 public MongoDBBase(string connectionString, string databaseName)
 {
  var client = new MongoClient(connectionString);
  if (client != null)
  {
  _database = client.GetDatabase(databaseName);
  }
 }

 #region SELECT
 /// <summary>
 /// 根据查询条件,获取数据
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="id"></param>
 /// <returns></returns>
 public List<T> GetList<T>(Expression<Func<T, bool>> conditions = null)
 {
  var collection = _database.GetCollection<T>(typeof(T).Name);
  if (conditions != null)
  {
  return collection.Find(conditions).ToList();
  }
  return collection.Find(_ => true).ToList();
 }#endregion

 #region INSERT/// <summary>
 /// 插入多条数据,数据用list表示
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="list"></param>
 /// <returns></returns>
 public List<T> InsertMany<T>(List<T> list)
 {
  var collection = _database.GetCollection<T>(typeof(T).Name);
  collection.InsertMany(list);
  return list;
 }
 #endregion
 }

Step 3: Create a new asp.net core webapi project and reference this type of library for demonstration

Add mongodb to appsetting.json in the project Connection string: I use a custom data name testdb here. When inserting into mongodb, the database, collection and document will be automatically created. Then look down

 "MongoConnection": { //mongodb数据库连接
 "ConnectionString": "mongodb://127.0.0.1:27017",
 "Database": "testdb",
 "IsSSL": true
 },

Step 4: Create a new mongodb test controller, showing the interface for inserting single and multiple items and querying.

[Produces("application/json")]
 [Route("api/MongoDB/[action]")]
 public class MongoDBController : Controller
 {
  private readonly MongoDBBase _context = null;
  public MongoDBController(IOptions<Settings> settings)
  {
   _context = new MongoDBBase(settings.Value.ConnectionString, settings.Value.Database);
  }
  [HttpGet]
  public IActionResult AddList()
  {
   List<MongoDBPostTest> list = new List<MongoDBPostTest>()
   {
    new MongoDBPostTest()
    {
     Id = "2",
     Body = "Test note 3",
     UpdatedOn = DateTime.Now,
     UserId = 1,
     HeaderImage = new NoteImage
     {
      ImageSize = 10,
      Url = "http://localhost/image1.png",
      ThumbnailUrl = "http://localhost/image1_small.png"
     }
    },
    new MongoDBPostTest()
    {
     Id = "3",
     Body = "Test note 4",
     UpdatedOn = DateTime.Now,
     UserId = 1,
     HeaderImage = new NoteImage
     {
      ImageSize = 14,
      Url = "http://localhost/image3.png",
      ThumbnailUrl = "http://localhost/image3_small.png"
     }
    }
   };

   try
   {
    _context.InsertMany(list);
   }
   catch (Exception ex)
   {

    throw;
   }

   return Ok("成功");
  }

  [HttpGet]
  public Result<List<MongoDBPostTest>> SelectSingle()
  {
   //无条件
   var list = _context.GetList<MongoDBPostTest>();

   //有条件
   //var list = _context.GetList<MongoDBPostTest>(a => a.Id == "1");

   //得到单条数据,无条件
   //var list = _context.GetSingle<MongoDBPostTest>();

   //得到单条数据,有条件
   //var list = _context.GetSingle<MongoDBPostTest>(a => a.Id == "3");

   ObjectId internalId = _context.GetInternalId("5bbf41651d3b66668cbb5bfc");

   var a = _context.GetSingle<MongoDBPostTest>(note => note.Id == "5bbf41651d3b66668cbb5bfc" || note.InternalId == internalId);

   return ResHelper.Suc(1, list, "成功");
  }
}
Test class

public class MongoDBPostTest
 {
  [BsonId]
  // standard BSonId generated by MongoDb
  public ObjectId InternalId { get; set; }
  public string Id { get; set; }

  public string Body { get; set; } = string.Empty;

  [BsonDateTimeOptions]
  public DateTime UpdatedOn { get; set; } = DateTime.Now;

  public NoteImage HeaderImage { get; set; }

  public int UserId { get; set; } = 0;
 }

public class NoteImage
 {
  public string Url { get; set; } = string.Empty;
  public string ThumbnailUrl { get; set; } = string.Empty;
  public long ImageSize { get; set; } = 0L;
 }

Step 5: Run the project and execute it.

Let’s insert multiple pieces of data and the execution is successful.

Then we looked at the database and found that a testdb database has been generated, which contains our data content

Then we perform the following query operations: return the data we just inserted.

Note: There is a pitfall to be solved here, that is, the time stored in mongodb is UTC, which will be different from our local The time difference is 8 hours. Therefore, special processing time is required here.

3. Summary

At this point, the simple use of mongodb has been demonstrated. Later, you can expand it according to the official documents, and then expand it further. , you will find it more and more interesting. thanks for your support. Thank you.

The above is the detailed content of Learn the complete steps to integrate MongoDB with asp.net core. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:jb51.net. If there is any infringement, please contact admin@php.cn delete