在Asp.Net Core项目中对接MongoDB实现数据操作是很多后端开发场景的常见需求,下面将通过完整的实例演示从环境配置到具体功能实现的全部流程。

环境准备与依赖安装
首先需要在项目中安装MongoDB的官方驱动包,打开NuGet包管理器,搜索MongoDB.Driver并安装最新稳定版本,或者通过命令行执行以下命令安装:
dotnet add package MongoDB.Driver
数据库连接配置
在appsettings.json中添加MongoDB的连接字符串配置,方便后续读取使用:
{
"MongoDBConfig": {
"ConnectionString": "mongodb://127.0.0.1:27017",
"DatabaseName": "TestDB"
}
}
接着创建配置实体类和数据库上下文类,用于管理数据库连接和集合操作:
// 配置实体类
public class MongoDBConfig
{
public string ConnectionString { get; set; }
public string DatabaseName { get; set; }
}
// 数据库上下文类
public class MongoDBContext
{
private readonly IMongoDatabase _database;
public MongoDBContext(IConfiguration configuration)
{
var config = configuration.GetSection("MongoDBConfig").Get<MongoDBConfig>();
var client = new MongoClient(config.ConnectionString);
_database = client.GetDatabase(config.DatabaseName);
}
// 获取指定集合,这里以User集合为例
public IMongoCollection<User> Users => _database.GetCollection<User>("Users");
}
定义实体类
创建对应的数据实体类,注意MongoDB默认使用_id作为主键,我们可以使用BsonId特性来映射:
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
public class User
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string UserName { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
注册服务
在Program.cs中将MongoDB上下文注册为单例服务,方便后续在控制器中注入使用:
var builder = WebApplication.CreateBuilder(args); // 注册MongoDB上下文 builder.Services.AddSingleton<MongoDBContext>(); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
增删改查实例实现
创建用户控制器,注入MongoDB上下文,实现完整的增删改查接口:
using Microsoft.AspNetCore.Mvc;
using MongoDB.Driver;
[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
private readonly MongoDBContext _context;
public UserController(MongoDBContext context)
{
_context = context;
}
// 新增用户
[HttpPost]
public async Task<IActionResult> AddUser(User user)
{
await _context.Users.InsertOneAsync(user);
return Ok(new { msg = "新增成功", data = user });
}
// 查询所有用户
[HttpGet]
public async Task<IActionResult> GetAllUsers()
{
var users = await _context.Users.Find(_ => true).ToListAsync();
return Ok(users);
}
// 根据ID查询用户
[HttpGet("{id}")]
public async Task<IActionResult> GetUserById(string id)
{
var filter = Builders<User>.Filter.Eq(u => u.Id, id);
var user = await _context.Users.Find(filter).FirstOrDefaultAsync();
if (user == null)
{
return NotFound(new { msg = "用户不存在" });
}
return Ok(user);
}
// 更新用户
[HttpPut("{id}")]
public async Task<IActionResult> UpdateUser(string id, User updateUser)
{
var filter = Builders<User>.Filter.Eq(u => u.Id, id);
var update = Builders<User>.Update
.Set(u => u.UserName, updateUser.UserName)
.Set(u => u.Age, updateUser.Age)
.Set(u => u.Email, updateUser.Email);
var result = await _context.Users.UpdateOneAsync(filter, update);
if (result.ModifiedCount == 0)
{
return NotFound(new { msg = "用户不存在,更新失败" });
}
return Ok(new { msg = "更新成功" });
}
// 删除用户
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteUser(string id)
{
var filter = Builders<User>.Filter.Eq(u => u.Id, id);
var result = await _context.Users.DeleteOneAsync(filter);
if (result.DeletedCount == 0)
{
return NotFound(new { msg = "用户不存在,删除失败" });
}
return Ok(new { msg = "删除成功" });
}
}
注意事项
- 生产环境中MongoDB连接字符串不要直接写在配置文件里,建议使用环境变量或者密钥管理服务存储
- 操作MongoDB时注意异常处理,避免未捕获的异常导致接口返回500错误
- 如果实体类的属性名称和MongoDB集合中的字段名称不一致,可以使用
BsonElement特性进行映射 - 批量操作场景建议使用对应的批量方法,比如
InsertManyAsync、DeleteManyAsync提升性能
Asp.Net_CoreMongoDB增删改查实例代码修改时间:2026-07-06 05:39:25