• .Net Core 3.0 对 MongoDB 的多条件(两种)查询操作



    前言

      在日常开发中,偶尔会用到 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 colle_Table1 = db_Test.GetCollection(collName_Table1);// BsonDocument:最终会以 Json 对象来取值
    public static IMongoCollection colle_Table2Model = db_Test.GetCollection(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 GetValues(string name, string id)
    {
    FilterDefinitionBuilder builderFilter = Builders.Filter;
    DateTime startTime = DateTime.Now.AddDays(-7);//只同步最近七天有更新的流程
    FilterDefinition 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(filter).ToList(); // 获取数据
    List jTokens = new List();
    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(querystr);
    var dataresult = MongoDBContextDefault.colle_Table2.Find(querycon).ToList();
    // 这里的 dataresult 结果类型是 List,可以直接跟属性取值,更方便
    }

     注:暂列这两种查询吧,后续继续补充,有问题欢迎指正。

  • 相关阅读:
    golang 琐碎知识
    深入理解java虚拟机-Java内存区域与内存溢出异常
    Tomcat下载安装教程
    js中函数多参数的简化
    【机器学习基础】——另一个视角解释SVM
    基于ASP.NET的驾校管理系统设计与实现
    【webrtc】Migrating your native/mobile application to Unified Plan/WebRTC 1.0 API.
    ALevel商务例题解析(1)
    开始Linux之路
    手机WEB页面自动化_在手机浏览器上实现WEB页面自动化
  • 原文地址:https://www.cnblogs.com/czzj/p/16858742.html