.net core 6 集成和使用 mongodb

这篇具有很好参考价值的文章主要介绍了.net core 6 集成和使用 mongodb。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、安装包 MongoDB.Driver

2、定义顶层类

/// <summary>
/// monggodb规范
/// </summary>
public abstract class MongoDBToolBase
{
    /// <summary>
    /// 客户端
    /// </summary>
    protected MongoClient mongoClient { get; private set; }
    /// <summary>
    /// 数据库
    /// </summary>
    protected IMongoDatabase? database;

    /// <summary>
    /// 构造
    /// </summary>
    /// <param name="conn"></param>
    protected MongoDBToolBase(string conn) {
        this.mongoClient = new MongoClient(conn);
    }
}

3、定义操作类

/// <summary>
/// MongoDB 操作类
/// </summary>
public class MongoDBTool<T> : MongoDBToolBase where T : class
{
    /// <summary>
    /// 构造
    /// </summary>
    public MongoDBTool(string conn) : base(conn)
    {
        List<Attribute> attributes
            = typeof(T).GetAttribute().FindAttributeEntity<MongoDBDatabase>();

        if (attributes.Any())
        {
            this.database = this.mongoClient.GetDatabase(((MongoDBDatabase)attributes.First()).name);
        }
        else
        {
            throw new Exception("未找到MongoDBDatabase注解");
        }
    }

    /// <summary>
    /// 得到值
    /// 一个条件
    /// </summary>
    /// <param name="collection">表名</param>
    /// <param name="colName">列名</param>
    /// <param name="value">值</param>
    /// <returns></returns>
    public string GetOneCol(string collection, string colName, string value)
    {
        return this.database?
            .GetCollection<T>(collection)
            .Find<T>(Builders<T>.Filter.Eq(colName, value))
            .ToEnumerable<T>()
            .FirstOrDefault()?
            .ToJson()
            ?? string.Empty;
    }
}

4、定义一个注解,映射mongodb的数据库名称

/// <summary>
/// MongoDB数据库名称
/// </summary>
public class MongoDBDatabase : Attribute
{
    /// <summary>
    /// 名称
    /// </summary>
    public string name { get; set; }

    /// <summary>
    /// 构造
    /// </summary>
    /// <param name="name"></param>
    public MongoDBDatabase(string name)
    {
        this.name = name;
    }
}

5、定义一个实体,映射数据库表字段并且关联对应的数据库

/// <summary>
/// 测试表
/// </summary>
[MongoDBDatabase("test")]
public class MongodbTestModel
{
    /// <summary>
    /// mongoid
    /// </summary>
    public ObjectId _id { get; set; }
    /// <summary>
    /// 名称
    /// </summary>
    public string name { get; set; } = string.Empty;
    /// <summary>
    /// 密码
    /// </summary>
    public string password { get; set; } = string.Empty;
    /// <summary>
    /// 备注
    /// </summary>
    public string rem {  get; set; } = string.Empty;
}

6、ioc注入

//注入mongodb单实例
builder.Services.AddSingleton(new MongoDBTool<MongodbTestModel>(builder.Configuration.GetValue<string>("mongodb")));

7、配置文件

"mongodb": "mongodb://username:password@localhost:27017/?authSource=admin"

8、扩展的注解工具类

/// <summary>
/// 注解工具
/// </summary>
public static class AttributeTool
{
    /// <summary>
    /// 获取注解
    /// </summary>
    /// <param name="cls"></param>
    /// <returns></returns>
    public static List<Attribute> GetAttribute(this Type cls)
    {
        // 获取所有自定义特性(包括注解)
        return cls.GetCustomAttributes().ToList();
    }

    /// <summary>
    /// 看看是否存在有对应注解实体
    /// 存在则返回
    /// </summary>
    /// <typeparam name="T">返回对应的实体数据</typeparam>
    /// <param name="attributes"></param>
    /// <returns></returns>
    public static List<Attribute> FindAttributeEntity<T>(this List<Attribute> attributes)
    {
        List<Attribute> temp = new List<Attribute>();

        Attribute? attribute = attributes.FirstOrDefault(attr =>
        {
            return attr.GetType() == typeof(T);
        });
        
        if (attribute?.IsDefaultAttribute() ?? true)
        {
            return temp;
        }

        temp.Add(attribute);
        
        return temp;
    }
}

9、接口

/// <summary>
/// 查询
/// </summary>
/// <returns></returns>
[HttpPost("search/{name}")]
public string SearchData([FromServices] MongoDBTool<MongodbTestModel> mongoDBTool, string name)
{
    return mongoDBTool.GetOneCol("test", "name", name);
}

都这样了还有什么好说的

附加操作文章来源地址https://www.toymoban.com/news/detail-817800.html

/// <summary>
/// 插入一条数据
/// </summary>
public void InsertOne(T mongodb)
{
    List<Attribute> attributes
        = typeof(T).GetAttribute().FindAttributeEntity<MongoDBCollection>();

    if (!attributes.Any())
    {
        return;
    }

    this.database?
        .GetCollection<BsonDocument>(((MongoDBCollection)attributes.First()).name)
        .InsertOne(mongodb.ToBsonDocument());
}

/// <summary>
/// 插入多条数据
/// </summary>
public void InsertMul(List<T> mongodb)
{
    List<Attribute> attributes
        = typeof(T).GetAttribute().FindAttributeEntity<MongoDBCollection>();
    List<BsonDocument> collection = new List<BsonDocument>();

    if (!attributes.Any())
    {
        return;
    }

    mongodb.ForEach(mo =>
    {
        collection.Add(mo.ToBsonDocument());
    });

    this.database?
        .GetCollection<BsonDocument>(((MongoDBCollection)attributes.First()).name)
        .InsertMany(collection);
}

/// <summary>
/// 得到值
/// 一个条件
/// </summary>
/// <param name="collection">表名</param>
/// <param name="colName">列名</param>
/// <param name="value">值</param>
/// <returns></returns>
public string GetOneCol(string collection, string colName, string value)
{
    return this.database?
        .GetCollection<T>(collection)
        .Find<T>(Builders<T>.Filter.Eq(colName, value))
        .ToEnumerable<T>()
        .FirstOrDefault()?
        .ToJson()
        ?? string.Empty;
}

/// <summary>
/// 得到值
/// 多个条件
/// </summary>
/// <param name="collection">表名</param>
/// <param name="colName">列名</param>
/// <param name="value">值</param>
/// <returns></returns>
public string GetOneMul(string collection, string colName, string value)
{
    FilterDefinition<T> filter = Builders<T>.Filter.And(
        Builders<T>.Filter.Eq("password", "77"),
        Builders<T>.Filter.Or(Builders<T>.Filter.Eq(colName, value), Builders<T>.Filter.Eq(colName, "几个"))
        );

    List<T>? list = this.database?
        .GetCollection<T>(collection)
        .Find<T>(filter).ToList();

    return list?.ToJson() ?? string.Empty;
}

到了这里,关于.net core 6 集成和使用 mongodb的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C# .NET 】使用 Entity Framework Core 操作sqlite数据库

    添加包 EF Core design package   NuGet Gallery | Home 使用用于 EF Core 迁移和现有数据库中的反向工程(基架)的工具需要安装相应的工具包: 可在 Visual Studio 包管理器控制台中使用的 PowerShell 工具的 Microsoft.EntityFrameworkCore.Tools 跨平台命令行工具的 dotnet-ef 和 Microsoft.EntityFramewor

    2024年02月14日
    浏览(44)
  • 在Linux平台下使用.NET Core访问Access数据库读取mdb文件数据

    今天有群友在群里问 C# 能不能在 Linux 下访问 Access数据库 ? 我觉得这很有趣,因此研究折腾了一下,也因为很久没有写博文了,所以特意上来写博文分享经验。 操作系统: Ubuntu 22.04.3 LTS (Jammy) 开发工具: Visual Studio 2022 (17.8.0) 运行时版本: .NET Runtime 8.0 依赖库: unixodbc 、

    2024年02月05日
    浏览(31)
  • MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成

    Swagger是一个规范且完整API文档管理框架,可以用于生成、描述和调用可视化的RESTful风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确

    2024年02月21日
    浏览(30)
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

    记录日志为文档 记录日志到数据库

    2024年02月20日
    浏览(37)
  • 使用asp.net core web api创建web后台,并连接和使用Sql Server数据库

    前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端,并访问sql server 数据库。 一、安装Visual studio 2022 社区版,并安装ASP.NET和

    2024年02月14日
    浏览(43)
  • NET Core添加 Sqlite 数据库

    .net framework 命令行项目使用 sqlite,DbContext C# .NET EF框架 webapi 安装使用sqlite visual studio 2022,ADO.NET 实体数据模型添加 sqlite数据库对象 Visual Studio 2022 .NET Core 6.0 Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Sqlite.Core Newtonsoft.Json ORMContext Program.cs 测试结果 Sqlite3是个特别好的本

    2024年02月11日
    浏览(38)
  • .net core .net6 读取数据库 读取配置文件 保姆级教程

    本文环境 Microsoft Visual Studio 2022 .Net6 SQLServer2019 在解决方案管理器右键添加相关的包,如下两个包 Microsoft.Data.SqlClient SQLServer SQLServer数据库 Microsoft.Extensions.Configuration.Json json配置文件 添加配置文件 appsettings.json,选始终复制 添加json配置文件内容如下 DefaultConnection 根据自己的

    2024年02月08日
    浏览(39)
  • .Net Core Entity Framework Core 的基础封装 -数据库操作拦截器

    自己制作的一个基于Entity Framework Core 的数据库操作拦截器,可以打印数据库执行sql,方便开发调试,代码如下: 运行结果如下:  

    2024年02月22日
    浏览(41)
  • ASP.NET Core MVC 从入门到精通之数据库

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步

    2023年04月27日
    浏览(83)
  • .NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移

    接上期文章《.NET6项目连接数据库方式方法》,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类、数据库。把ORM框架和数据迁移都写进去。 我的项目是在Linux上创建的,使用的是vscode开发工具远程开发。为了方便大家阅读和操作,我将项目down到我的本地电

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包