В этой статье мы обсудим основы MongoDB и пошаговую реализацию с использованием веб-API .NET Core 7.

Повестка дня

  • Введение
  • Возможности MongoDB
  • Основные понятия MongoDB
  • Установка MongoDB
  • Пошаговая реализация с использованием .NET Core Web API

Предпосылки

  • Пакет SDK для .NET Core 7
  • Визуальная студия 2022
  • MongoDB

Введение

  • MongoDB — это документная база данных No SQL общего назначения, разработанная для современных и облачных приложений.
  • Он написан на языке программирования C++.
  • Mongo DB работает над концепцией коллекций и документов.

  • В ней нет таких понятий, как схема, таблица, строка и SQL, потому что это чисто документно-ориентированная база данных, которая работает с данными любого размера и типа.
  • Еще одна концепция MongoDB заключается в том, что всегда должно быть более одной копии базы данных, и из-за этого, если одна база данных выйдет из строя, она восстановит другую базу данных.
  • Если вы хотите узнать об этом больше, ознакомьтесь с официальной документацией MongoDB.

Функции MongoDB

  • Кроссплатформенность
  • Документно-ориентированная база данных
  • Высокая масштабируемость и производительность
  • Высокая доступность и долговечность

Основные понятия MongoDB

  1. База данных. База данных MongoDB представляет собой набор коллекций.
  2. Коллекция. В MongoDB коллекция представляет собой группу документов. Это не похоже на таблицу в реляционной базе данных, внутри коллекции есть много документов с разными полями, которые не привязаны к какой-либо схеме, как мы видели в базе данных SQL.

  1. Документ. В MongoDB документ представляет собой набор пар ключ-значение и имеет динамическую структуру, что означает, что данные, которые мы храним в документе, не обязательно имеют одно и то же поле и структуру.
  2. Индексы.MongoDB предоставляет несколько индексов для эффективного выполнения запросов, которые помогают нам ускорить запросы при извлечении данных.
  3. Наборы реплик. В MongoDB, когда мы создаем любую базу данных, в этом случае она создает как минимум две копии нашей базы данных, что обеспечивает высокую доступность, а у mongo есть набор реплик для той, которая постоянно реплицирует данные между их.
  4. Разбиение. В MongoDB разбиение — это метод распределения данных по нескольким кластерам, и он будет использовать разбиение, когда набор данных большой и необходимо обеспечить высокую пропускную способность.

Установка MongoDB

Перейдите по следующей ссылке, чтобы установить MongoDB на свой компьютер.

https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-windows/

После установки откройте MongoDB Compass и создайте новое подключение mongodb://localhost:27017.

Пошаговая реализация с использованием .NET Core Web API

Шаг 1

Создайте новое приложение веб-API .NET Core.

Шаг 2

Установите следующие пакеты NuGet.

Шаг 3

Создайте новый класс сведений о продукте.

using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;

namespace MongoDbDemo.Entities
{
    public class ProductDetails
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string Id { get; set; }
        [BsonElement("ProductName")]
        public string ProductName { get; set; }
        public string ProductDescription { get; set; }
        public int ProductPrice { get; set; }
        public int ProductStock { get; set; }
    }
}

Шаг 4

Затем добавьте класс Product DB Settings.

namespace MongoDbDemo.Configurations
{
    public class ProductDBSettings
    {
        public string ConnectionString { get; set; }
        public string DatabaseName { get; set; }
        public string ProductCollectionName { get; set; }
    }
}

Шаг 5

Создайте новый IProductService и IProductService внутри папки репозиториев.

IPProductService

using MongoDbDemo.Entities;

namespace MongoDbDemo.Repositories
{
    public interface IProductService
    {
        public Task<List<ProductDetails>> ProductListAsync();
        public Task<ProductDetails> GetProductDetailByIdAsync(string productId);
        public Task AddProductAsync(ProductDetails productDetails);
        public Task UpdateProductAsync(string productId,ProductDetails productDetails);
        public Task DeleteProductAsync(String productId);
    }
}

ПродуктСервис

using Microsoft.Extensions.Options;
using MongoDB.Driver;
using MongoDbDemo.Configurations;
using MongoDbDemo.Entities;

namespace MongoDbDemo.Repositories
{
    public class ProductService :IProductService
    {
        private readonly IMongoCollection<ProductDetails> productCollection;
        public ProductService(
         IOptions<ProductDBSettings> productDatabaseSetting)
        {
            var mongoClient = new MongoClient(
                productDatabaseSetting.Value.ConnectionString);
            var mongoDatabase = mongoClient.GetDatabase(
                productDatabaseSetting.Value.DatabaseName);
            productCollection = mongoDatabase.GetCollection<ProductDetails>(
                productDatabaseSetting.Value.ProductCollectionName);
        }
        public async Task<List<ProductDetails>> ProductListAsync()
        {
            return await productCollection.Find(_ => true).ToListAsync();
        }
        public async Task<ProductDetails> GetProductDetailByIdAsync(string productId)
        {
            return await productCollection.Find(x => x.Id == productId).FirstOrDefaultAsync();
        }
        public async Task AddProductAsync(ProductDetails productDetails)
        {
            await productCollection.InsertOneAsync(productDetails);
        }
        public async Task UpdateProductAsync(string productId, ProductDetails productDetails)
        {
             await productCollection.ReplaceOneAsync(x => x.Id == productId, productDetails);
        }
        public async Task DeleteProductAsync(string productId)
        {
            await productCollection.DeleteOneAsync(x => x.Id == productId);
        }
    }
}

Шаг 6

Затем добавьте новый контроллер продукта.

using Microsoft.AspNetCore.Mvc;
using MongoDbDemo.Entities;
using MongoDbDemo.Repositories;

namespace MongoDbDemo.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ProductsController : ControllerBase
    {
        private readonly IProductService productService;
        public ProductsController(IProductService productService) =>
            this.productService = productService;
        [HttpGet]
        public async Task<List<ProductDetails>> Get()
        {
            return await productService.ProductListAsync();
        }
        [HttpGet("{productId:length(24)}")]
        public async Task<ActionResult<ProductDetails>> Get(string productId)
        {
            var productDetails = await productService.GetProductDetailByIdAsync(productId);
            if (productDetails is null)
            {
                return NotFound();
            }
            return productDetails;
        }
        [HttpPost]
        public async Task<IActionResult> Post(ProductDetails productDetails)
        {
            await productService.AddProductAsync(productDetails);
            return CreatedAtAction(nameof(Get), new { id = productDetails.Id }, productDetails);
        }
        [HttpPut("{productId:length(24)}")]
        public async Task<IActionResult> Update(string productId, ProductDetails productDetails)
        {
            var productDetail = await productService.GetProductDetailByIdAsync(productId);
            if (productDetail is null)
            {
                return NotFound();
            }
            productDetails.Id = productDetail.Id;
            await productService.UpdateProductAsync(productId, productDetails);
            return Ok();
        }
        [HttpDelete("{productId:length(24)}")]
        public async Task<IActionResult> Delete(string productId)
        {
            var productDetails = await productService.GetProductDetailByIdAsync(productId);
            if (productDetails is null)
            {
                return NotFound();
            }
            await productService.DeleteProductAsync(productId);
            return Ok();
        }
    }
}

Шаг 7

Откройте файл appsettings.json и добавьте в него URL-адрес сервера MongoDB, базу данных и имя коллекции после создания в MongoDB Compass.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ProductDatabase": {
    "ConnectionString": "mongodb://localhost:27017",
    "DatabaseName": "ProductDB",
    "ProductCollectionName": "Product"
  }
}

Шаг 8

Зарегистрируйте несколько сервисов внутри класса Program.

using MongoDbDemo.Configurations;
using MongoDbDemo.Repositories;

var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.Configure<ProductDBSettings>(
builder.Configuration.GetSection("ProductDatabase"));
builder.Services.AddSingleton<IProductService, ProductService>();
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

Шаг 9

Запустите приложение и добавьте некоторые сведения о продукте с помощью пользовательского интерфейса swagger.

Шаг 10

После добавления некоторых данных о продукте вы можете увидеть детали внутри MongoDB Compass, как показано ниже.

URL-адрес GitHub-

https://github.com/Jaydeep-007/MongoDbDemo

Вывод-

Здесь мы обсудили введение и базовую концепцию MongoDB, а также пошаговую реализацию API-интерфейса приложения продукта с использованием веб-API .NET Core 7.

Удачного кодирования!!!