В этой статье мы обсудим основы 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
- База данных. База данных MongoDB представляет собой набор коллекций.
- Коллекция. В MongoDB коллекция представляет собой группу документов. Это не похоже на таблицу в реляционной базе данных, внутри коллекции есть много документов с разными полями, которые не привязаны к какой-либо схеме, как мы видели в базе данных SQL.
- Документ. В MongoDB документ представляет собой набор пар ключ-значение и имеет динамическую структуру, что означает, что данные, которые мы храним в документе, не обязательно имеют одно и то же поле и структуру.
- Индексы.MongoDB предоставляет несколько индексов для эффективного выполнения запросов, которые помогают нам ускорить запросы при извлечении данных.
- Наборы реплик. В MongoDB, когда мы создаем любую базу данных, в этом случае она создает как минимум две копии нашей базы данных, что обеспечивает высокую доступность, а у mongo есть набор реплик для той, которая постоянно реплицирует данные между их.
- Разбиение. В 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.
Удачного кодирования!!!