前言??在日常开发中,偶尔会用到 MongoDB 的数据操作,也花费了一些时间调试,因此在此处记录一下,共同进步 。
废话少说 , 出招吧!
正文2.1 准备工作首先需要引入 .Net 平台链接 MongoDB 的动态库:MongoDB.Driver;
然后创建默认 DBContext 实体类:
(将数据库以及表的信息引入到系统中备用 , 数据库链接信息最好是放置在配置文件中,便于不同环境灵活配置,次非本文重点就直接默认了)
using MongoDB.Bson;using MongoDB.Driver;namespace DBContext.DataBase{public class MongoDBContextDefault{//连接地址private static string conn = "mongodb://0.0.0.0:0000";//连接服务端static MongoClient client_pub = new MongoClient(conn);//数据库名称private static string dbName = "MongDBName";//集合名称private static string collName_Table1 = "Table1";private static string collName_Table2 = "Table2";//获取指定数据库static IMongoDatabase db_Test = client_pub.GetDatabase(dbName);//获取指定集合BsonDocument数据库文档对象public static IMongoCollection<BsonDocument> colle_Table1 = db_Test.GetCollection<BsonDocument>(collName_Table1);// BsonDocument:最终会以 Json 对象来取值public static IMongoCollection<Table2Model> colle_Table2Model = db_Test.GetCollection<Table2Model>(collName_Table2);// Table2Model:与表字段完全一致的对象,取值方便}}
2.2 数据访问--获取 Json 对象直接上代码,看注释即可:
(传入的查询条件 , 需要和数据库中的类型匹配)(若通过 ID 查询,需要将条件值转为 Guid 类型)
using DBContext.DataBase;using MongoDB.Bson;using MongoDB.Bson.IO;using MongoDB.Bson.Serialization;using MongoDB.Driver;using Newtonsoft.Json.Linq;
public List<JObject> GetValues(string name, string id){FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;DateTime startTime = DateTime.Now.AddDays(-7);//只同步最近七天有更新的流程FilterDefinition<BsonDocument> filter = builderFilter.And(builderFilter.Eq("name", name), // 多条件查询builderFilter.Eq("id", new Guid(id)), // id 需要转换成 Guid 类型builderFilter.Gte("stime", startTime)); // Time 需要是 DateTime 类型var result = MongoDBContextDefault.colle_ProcInstData.Find<BsonDocument>(filter).ToList(); // 获取数据List<JObject> jTokens = new List<JObject>();var setjson = new JsonWriterSettings{OutputMode = JsonOutputMode.Strict};foreach (var item in result) // 逐个转为 JObject,备用(后续循环,可以直接通过 JObjectItem["name"] 进行取值){JObject item_jo = JObject.Parse(item.ToJson(setjson));jTokens.Add(item_jo);}return jTokens;}
2.3 数据访问--获取指定对象类型此方案中的查询字符串和上一章节是有区别的,具体如下:
(查询条件先拼接成 json 字符串 , 再转 BsonDocument 对象)
public void Method(string name,string id){DateTime dtcondition = DateTime.Now.AddDays(-7);// 时间上差一个月,所以月份 -1 // 具体原因未知 。。。待后续补充string strdate = $"new Date({dtcondition.Year},{dtcondition.Month - 1},{dtcondition.Day})";string querystr = $"{{$and:[{{'name':'{name}'}}" +$",{{'id':CSUUID('{id}')}}" + // 另一种根据 ID 查询方式$",{{'time':{{$gte:{strdate}}}}}]}}";var querycon = BsonSerializer.Deserialize<BsonDocument>(querystr);var dataresult = MongoDBContextDefault.colle_Table2.Find(querycon).ToList();// 这里的 dataresult 结果类型是 List<Table2Model>,可以直接跟属性取值,更方便}
注:暂列这两种查询吧 , 后续继续补充,有问题欢迎指正 。
【两种 .Net Core 3.0 对 MongoDB 的多条件查询操作】
推荐阅读
- .NET性能优化-复用StringBuilder
- .net 温故知新:【8】.NET 中的配置从xml转向json
- 来啦来啦|开源 * 安全 * 赋能 - .NET Conf China
- 如何在.NET程序崩溃时自动创建Dump?
- .NET Conf 2022 &ndash; 11 月 8 日至 10 日
- .NET 零开销抽象指南
- 二、.Net Core搭建Ocelot
- 创建.NET程序Dump的几种姿势
- C# 8.0 添加和增强的功能【基础篇】
- .NET性能系列文章二:Newtonsoft.Json vs. System.Text.Json