如何在.Net中使用MongoDB实现数据操作

来源:AI大模型作者:台湾程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《如何在.Net中使用MongoDB实现数据操作》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在.Net中使用MongoDB实现数据操作》有用,将其分享出去将是对创作者最好的鼓励。

在.Net项目中使用MongoDB可以快速实现非结构化数据的存储与管理,相比传统关系型数据库,它更适合处理字段不固定、数据量增长快的业务场景,比如用户行为日志、商品动态属性存储等。

如何在.Net中使用MongoDB实现数据操作

环境准备与驱动安装

首先需要在本地或服务器安装MongoDB服务,安装完成后启动MongoDB服务。接着在.Net项目中安装MongoDB官方驱动,目前主流的驱动是MongoDB.Driver,可以通过NuGet包管理器安装,也可以在包管理器控制台执行以下命令:

Install-Package MongoDB.Driver

建立数据库连接

连接MongoDB需要指定服务地址、数据库名称,还可以配置认证信息。以下是基础的连接代码示例:

using MongoDB.Driver;
using System;

namespace MongoDBDemo
{
    public class MongoDBHelper
    {
        // MongoDB连接字符串,本地默认端口为27017
        private static readonly string connectionString = "mongodb://127.0.0.1:27017";
        // 数据库名称
        private static readonly string databaseName = "test_db";
        
        public static IMongoDatabase GetDatabase()
        {
            var client = new MongoClient(connectionString);
            return client.GetDatabase(databaseName);
        }
    }
}

定义数据实体类

操作MongoDB的文档需要对应实体类,MongoDB的文档_id字段默认是ObjectId类型,我们可以在实体类中定义对应属性:

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

namespace MongoDBDemo
{
    public class User
    {
        // 对应MongoDB文档的_id字段
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string Id { get; set; }
        
        public string UserName { get; set; }
        
        public int Age { get; set; }
        
        public string Email { get; set; }
    }
}

实现基础CRUD操作

新增数据

新增单条或多条数据的实现代码如下:

using MongoDB.Driver;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace MongoDBDemo
{
    public class UserRepository
    {
        private readonly IMongoCollection<User> _userCollection;
        
        public UserRepository()
        {
            var database = MongoDBHelper.GetDatabase();
            _userCollection = database.GetCollection<User>("user");
        }
        
        // 新增单条用户数据
        public async Task AddUserAsync(User user)
        {
            await _userCollection.InsertOneAsync(user);
        }
        
        // 批量新增用户数据
        public async Task AddUsersAsync(List<User> users)
        {
            await _userCollection.InsertManyAsync(users);
        }
    }
}

查询数据

可以根据不同条件查询数据,以下是常见的查询示例:

using MongoDB.Driver;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace MongoDBDemo
{
    public class UserRepository
    {
        // 省略构造函数等重复代码
        
        // 查询所有用户
        public async Task<List<User>> GetAllUsersAsync()
        {
            return await _userCollection.Find(_ => true).ToListAsync();
        }
        
        // 根据用户名查询用户
        public async Task<User> GetUserByUserNameAsync(string userName)
        {
            var filter = Builders<User>.Filter.Eq(u => u.UserName, userName);
            return await _userCollection.Find(filter).FirstOrDefaultAsync();
        }
        
        // 查询年龄大于指定值的用户
        public async Task<List<User>> GetUsersByAgeGreaterAsync(int age)
        {
            var filter = Builders<User>.Filter.Gt(u => u.Age, age);
            return await _userCollection.Find(filter).ToListAsync();
        }
    }
}

更新数据

更新操作需要指定过滤条件和更新内容,以下是更新示例:

using MongoDB.Driver;
using System.Threading.Tasks;

namespace MongoDBDemo
{
    public class UserRepository
    {
        // 省略构造函数等重复代码
        
        // 更新用户邮箱
        public async Task UpdateUserEmailAsync(string userId, string newEmail)
        {
            var filter = Builders<User>.Filter.Eq(u => u.Id, userId);
            var update = Builders<User>.Update.Set(u => u.Email, newEmail);
            await _userCollection.UpdateOneAsync(filter, update);
        }
        
        // 批量更新年龄小于18的用户年龄加1
        public async Task BatchUpdateAgeAsync()
        {
            var filter = Builders<User>.Filter.Lt(u => u.Age, 18);
            var update = Builders<User>.Update.Inc(u => u.Age, 1);
            await _userCollection.UpdateManyAsync(filter, update);
        }
    }
}

删除数据

删除操作可以根据条件删除单条或多条数据:

using MongoDB.Driver;
using System.Threading.Tasks;

namespace MongoDBDemo
{
    public class UserRepository
    {
        // 省略构造函数等重复代码
        
        // 根据ID删除用户
        public async Task DeleteUserByIdAsync(string userId)
        {
            var filter = Builders<User>.Filter.Eq(u => u.Id, userId);
            await _userCollection.DeleteOneAsync(filter);
        }
        
        // 删除所有年龄小于16的用户
        public async Task DeleteUsersByAgeAsync()
        {
            var filter = Builders<User>.Filter.Lt(u => u.Age, 16);
            await _userCollection.DeleteManyAsync(filter);
        }
    }
}

注意事项

  • 生产环境中连接字符串不要硬编码,建议放在配置文件里,同时如果需要认证要加上用户名密码信息
  • 实体类的属性名如果和MongoDB文档字段名不一致,可以使用[BsonElement]特性指定映射的字段名
  • 大量数据查询时建议添加索引提升查询效率,避免全表扫描
  • 异步操作要注意异常处理,避免未捕获的异常导致程序崩溃

MongoDB.NetC#数据操作CRUD修改时间:2026-07-08 18:24:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。