程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

MongoDB 入门与 ASP.NET Core 集成全指南

balukai 2025-05-07 22:57:54 文章精选 4 ℃

MongoDB 入门与 ASP.NET Core 集成全指南

1. 引言

MongoDB 是一种流行的 NoSQL 数据库,因其灵活的文档存储模型和高性能而备受欢迎。在 ASP.NET Core 中集成 MongoDB,可以轻松构建高效、可扩展的现代 Web 应用程序。


2. 为什么选择 MongoDB?

在 ASP.NET Core 项目中选择 MongoDB 的原因包括:

  • o 灵活的文档模型:支持 JSON 格式的文档存储,适合处理复杂和动态数据。
  • o 高性能:支持水平扩展和高吞吐量。
  • o 跨平台支持:MongoDB 和 ASP.NET Core 都是跨平台的,适合多种部署环境。
  • o 丰富的生态系统:提供强大的驱动程序和工具支持。

3. 在 ASP.NET Core 中集成

3.1 安装 MongoDB 驱动程序

通过 NuGet 安装 MongoDB.Driver 包:

dotnet add package MongoDB.Driver

3.2 配置 MongoDB 连接

appsettings.json 文件中添加 MongoDB 的连接字符串和数据库名称:

{
  "MongoDB": {
    "ConnectionString": "mongodb://localhost:27017",
    "DatabaseName": "MyDatabase"
  }
}

3.3 创建 MongoDB 配置类

创建一个配置类,用于读取 appsettings.json 中的 MongoDB 配置信息:

// filepath: Models/MongoDBSettings.cs
namespace MyApp.Models
{
    public class MongoDBSettings
    {
        public string ConnectionString { get; set; }
        public string DatabaseName { get; set; }
    }
}

3.4 在依赖注入中注册 MongoDB 服务

Program.cs 文件中注册 MongoDB 服务:

using Microsoft.Extensions.Options;
using MongoDB.Driver;
using MyApp.Models;

var builder = WebApplication.CreateBuilder(args);

// 绑定 MongoDB 配置
builder.Services.Configure<MongoDBSettings>(
    builder.Configuration.GetSection("MongoDB"));

// 注册 MongoDB 客户端
builder.Services.AddSingleton<IMongoClient>(sp =>
{
    var settings = sp.GetRequiredService<IOptions<MongoDBSettings>>().Value;
    return new MongoClient(settings.ConnectionString);
});

// 注册 MongoDB 数据库
builder.Services.AddSingleton(sp =>
{
    var settings = sp.GetRequiredService<IOptions<MongoDBSettings>>().Value;
    var client = sp.GetRequiredService<IMongoClient>();
    return client.GetDatabase(settings.DatabaseName);
});

 builder.Services.AddSingleton<BookService>();

var app = builder.Build();
app.Run();

3.5 创建数据模型

定义一个数据模型类,用于映射 MongoDB 文档:

// filepath: Models/Book.cs
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace MyApp.Models
{
    public class Book
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string Id { get; set; }

        [BsonElement("Title")]
        public string Title { get; set; }

        [BsonElement("Author")]
        public string Author { get; set; }

        [BsonElement("PublishedYear")]
        public int PublishedYear { get; set; }
    }
}

3.6 创建数据访问服务

创建一个服务类,用于封装对 MongoDB 的操作:

// filepath: Services/BookService.cs
using MongoDB.Driver;
using MyApp.Models;

namespace MyApp.Services
{
    public class BookService
    {
        private readonly IMongoCollection<Book> _books;

        public BookService(IMongoDatabase database)
        {
            _books = database.GetCollection<Book>("Books");
        }

        public async Task<List<Book>> GetAsync() =>
            await _books.Find(book => true).ToListAsync();

        public async Task<Book> GetAsync(string id) =>
            await _books.Find(book => book.Id == id).FirstOrDefaultAsync();

        public async Task CreateAsync(Book book) =>
            await _books.InsertOneAsync(book);

        public async Task UpdateAsync(string id, Book updatedBook) =>
            await _books.ReplaceOneAsync(book => book.Id == id, updatedBook);

        public async Task DeleteAsync(string id) =>
            await _books.DeleteOneAsync(book => book.Id == id);
    }
}

3.7 在控制器中使用服务

创建一个控制器,使用 BookService 来处理 HTTP 请求:

// filepath: Controllers/BooksController.cs
using Microsoft.AspNetCore.Mvc;
using MyApp.Models;
using MyApp.Services;

namespace MyApp.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class BooksController : ControllerBase
    {
        private readonly BookService _bookService;

        public BooksController(BookService bookService)
        {
            _bookService = bookService;
        }

        [HttpGet]
        public async Task<ActionResult<List<Book>>> Get() =>
            await _bookService.GetAsync();

        [HttpGet("{id}")]
        public async Task<ActionResult<Book>> Get(string id)
        {
            var book = await _bookService.GetAsync(id);

            if (book == null)
            {
                return NotFound();
            }

            return book;
        }

        [HttpPost]
        public async Task<IActionResult> Create(Book book)
        {
            await _bookService.CreateAsync(book);
            return CreatedAtAction(nameof(Get), new { id = book.Id }, book);
        }

        [HttpPut("{id}")]
        public async Task<IActionResult> Update(string id, Book updatedBook)
        {
            var book = await _bookService.GetAsync(id);

            if (book == null)
            {
                return NotFound();
            }

            await _bookService.UpdateAsync(id, updatedBook);
            return NoContent();
        }

        [HttpDelete("{id}")]
        public async Task<IActionResult> Delete(string id)
        {
            var book = await _bookService.GetAsync(id);

            if (book == null)
            {
                return NotFound();
            }

            await _bookService.DeleteAsync(id);
            return NoContent();
        }
    }
}

4. 测试 API

运行项目后,可以使用 Postman 测试:

  • o GET /api/books:获取所有书籍。
  • o GET /api/books/{id}:获取指定书籍。
  • o POST /api/books:创建新书籍。
  • o PUT /api/books/{id}:更新书籍信息。
  • o DELETE /api/books/{id}:删除书籍。

5. 总结

通过对本文的学习,可以轻松地在 ASP.NET Core 项目中集成 MongoDB,并实现基本的 CRUD 操作。通过实践和优化,可以充分发挥 MongoDB 和 ASP.NET Core 的强大功能,构建高效、可靠的应用程序。

最近发表
标签列表