.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);
}
都这样了还有什么好说的
附加操作
/// <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
1、安装包 MongoDB.Driver 2、定义顶层类 /// <summary> /// monggodb规范 /// </summary> public abstract class MongoDBToolBase { /// <summary> /// 客户端 /// </summary> protected MongoClient mongoClient { get; private …...
07-微服务getaway网关详解
一、初识网关 在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例…...
MS2660:L1 频段卫星导航射频前端低噪声放大器芯片
MS2660 是一款具有高增益、低噪声系数的低噪声放 大器(LNA)芯片,支持 L1 频段多模式全球卫星定位,可 以应用于 GPS、北斗二代、伽利略、Glonass 等 GNSS 导航 接收机中。芯片采用先进工艺制造,封装采用 2 mm 2 mm …...
微信小程序防止截屏录屏
一、使用css添加水印 使用微信小程序原生的view和css给屏幕添加水印这样可以防止用户将小程序内的隐私数据进行截图或者录屏分享导致信息泄露,给小程序添加一个水印浮层。这样即使被截图或者拍照,也能轻松地确定泄露的源头。效果图如下: 代码…...
126.(leaflet篇)leaflet松散型arcgis缓存切片加载
地图之家总目录(订阅之前必须详细了解该博客) arcgis缓存切片数据格式如下: 完整代码工程包下载,运行如有问题,可“私信”博主。效果如下所示: leaflet松散型arcgis缓存切片加载 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYP...
物联网介绍
阅读引言: 本文从多方面叙述物联网的定义以及在物联网当中的各种通信的介绍。 一、物联网的定义 1.1 通用的定义 物联网(Internet of Things,IOT;也称为Web of Things)是指通过各种信息传感设 备,如传感器、…...
Flume 之自定义Sink
1、简介 前文我们介绍了 Flume 如何自定义 Source, 并进行案例演示,本文将接着前文,自定义Sink,在这篇文章中,将使用自定义 Source 和 自定义的 Sink 实现数据传输,让大家快速掌握Flume这门技术。 2、自定…...
【1】SM4 CBC-MAC 机制
0x01 题目 MSG1: e55e3e24a3ae7797808fdca05a16ac15eb5fa2e6185c23a814a35ba32b4637c2 MAC1: 0712c867aa6ec7c1bb2b66312367b2c8 ----------------------------------------------------- MSG2: d8d94f33797e1f41cab9217793b2d0f02b93d46c2ead104dce4bfec453767719 MAC2: 4366…...
响应式编程Reactor API大全(下)
Reactor 是一个基于响应式编程的库,主要用于构建异步和事件驱动的应用程序。Reactor 提供了丰富的 API,包括创建、转换、过滤、组合等操作符,用于处理异步数据流。以下是一些 Reactor 的主要 API 示例: pom依赖 <dependencyMan…...
【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案)
【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案) 前文: 【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(疑难杂症) 目前已解决 …...
Python 语法糖
一、基本概念 语法糖,可以理解为:“甜蜜” 的便捷语法。 它是编程语言为程序提供的更简洁、更易读的语法实现的语法结构,它并不影响语言的功能,仅仅是一种更便捷的书写方式。 这就像你制作蛋糕时,使用现代烤箱而不是…...
一个小程序跳转到另一个小程序中如何实现
小程序 保证两个小程序是一样的主体才可以跳转。怎么知道是不是同样的主体呢? 小程序的后台管理-设置-基本设置-基本信息。查看主体信息。 跳转 <button clicktoOtherMini()>跳转到另一个小程序</button> function toOtherMini(){wx.navigateToMini…...
STM32+HAL库驱动ADXL345传感器(SPI协议)
STM32HAL库驱动ADXL345传感器(SPI协议) ADXL345传感器简介实物STM32CubeMX配置SPI配置片选引脚配置串口配置 特别注意(重点部分)核心代码效果展示 ADXL345传感器简介 ADXL345 是 ADI 公司推出的基于 iMEMS 技术的 3 轴、数字输出加…...
Redis实现全局唯一Id
一、全局唯一ID 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显 受单表数据量的限制 场景分析:如果我们的…...
【J-Flash基本使用总结】
【J-Flash基本使用总结】 VX:hao541022348 ■ 烧录文件■ 创建新的工程■ 烧录模式-SWD模式■ J-Flash下载程序到单片机 ■ J-Flash拼接多个hex或bin文件■ J-Flash读单片机的option byte■ J-Flash读单片机Flash数据■ 将读出来的文件用jflash烧录到其他的芯片■ 设…...
宝塔发布网站问题汇总和记录
1、添加网站站点后打不开 解决办法,关闭防跨站攻击2 2、laravel项目部署到linux的时候出现The stream or file "/home/www/storage/logs/laravel.log" could not be opened in append mode 给目录加权限 chmod -R 777 storage 3、Class "Redis"…...
决战排序之巅(二)
决战排序之巅(二) 排序测试函数 void verify(int* arr, int n) 归并排序递归方案代码可行性测试 非递归方案代码可行性测试 特点分析 计数排序代码实现代码可行性测试 特点分析 归并排序 VS 计数排序(Release版本)说明1w rand( ) …...
自动化网络监控:每分钟自动检测网站可用性
🧙♂️ 诸位好,吾乃诸葛妙计,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &…...
Asp .Net Core 系列:集成 Ocelot+Consul实现网关、服务注册、服务发现
什么是Ocelot? Ocelot是一个开源的ASP.NET Core微服务网关,它提供了API网关所需的所有功能,如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关,它可以与现有的服务集成,并帮助您保护、监控和扩展您的微…...
MSSQL行转列、列转行
行转列 SELECT * FROM student PIVOT ( SUM(score) FOR subject IN (语文, 数学, 英语) ) AS PivotedData; 列转行 SELECT * FROM student1 UNPIVOT ( score FOR subject IN ("语文","数学","英语") )AS PivotedData;...
边缘AI加速:CGRA架构与近似计算技术解析
1. 项目概述在边缘计算和人工智能快速发展的今天,如何设计高能效的硬件架构来支持复杂的神经网络推理任务,成为了一个关键挑战。传统的ASIC方案虽然性能优异,但缺乏灵活性;而通用处理器又难以满足能效要求。粗粒度可重构架构(CGRA…...
源代码论文分享|基于 Spring Boot 的校园商铺管理系统!
很多同学选毕业设计时都会纠结:题目太简单,怕老师觉得没含金量;题目太复杂,又怕自己做不完。 其实像校园商铺管理系统这种项目,就挺适合拿来做毕设或课程设计。它有真实场景,功能也能展开,技术…...
怎么区分储能PACK线源头工厂和中间商?
在储能 PACK 自动化产线行业深耕多年,我见过不少新能源企业踩了中间商的坑。有的客户花了高于市场价两成的预算,拿到的却是套用通用模板的产线,防静电、防爆设计不到位,投产没多久就频繁故障;还有的后期出问题…...
Unity版本降级实战指南:从2021.1回退到2019.4的四步硬核操作
1. 为什么Unity版本降级不是“回退安装”那么简单 在Unity项目开发中,很多人把“降级”理解成卸载新版本、重装旧版本、再拖进工程——就像换手机系统时刷回上个固件。但Unity的版本管理机制远比这复杂得多。我第一次遇到从2021.1.7f1c1往回降到2019.4.17f1c1的问题…...
从排名监控到答案诊断:一个算法工程师眼中的GEO工具技术选型标准
本文从工程师视角,剖析生成式搜索优化中的多模型诊断瓶颈,通过异步调度架构与沙盒隔离策略,实现品牌提及率的精准监控与算力可控消耗,为GEO工具选型提供技术验证依据。 传统监控工具在生成式搜索场景面临三重策略瓶颈:…...
惠普OMEN游戏本性能解放终极指南:OmenSuperHub完全使用教程
惠普OMEN游戏本性能解放终极指南:OmenSuperHub完全使用教程 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为官方Omen Gaming Hub的臃肿和…...
通过 curl 命令快速测试 Taotoken 各大模型接口连通性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过 curl 命令快速测试 Taotoken 各大模型接口连通性 在接入大模型服务时,直接使用 curl 命令进行接口测试是一种高效…...
服务器CPU架构对决:Chiplet与Monolithic技术解析与选型指南
1. 市场格局的悄然变迁:从“牙膏厂”到“撕裂者”的冲击如果你最近几年一直在关注数据中心和服务器市场,一个非常明显的趋势是,曾经由英特尔至强处理器几乎垄断的“铁王座”,正在被AMD的EPYC(霄龙)处理器一…...
【AI Agent部署】Claude Code + Ollama/CC Switch 部署指南
Windows11 Claude Code 简单的配置指南方式一和方式二中也是两种Claude Code的安装方式 方式一:NPM 全局安装 依赖Node环境适合原本就用Node开发的用户容易出现全局包路径冲突 方式二:Winget 原生安装(推荐新方案) 无任何依赖&am…...
3步解锁百度网盘全速下载:baidu-wangpan-parse技术解析与应用实践
3步解锁百度网盘全速下载:baidu-wangpan-parse技术解析与应用实践 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否曾面对百度网盘那令人绝望的下载速度而束手…...
