5

.Net Core 3.0 对 MongoDB 的多条件(两种)查询操作 - 橙子家

 1 year ago
source link: https://www.cnblogs.com/czzj/p/16858742.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client



  在日常开发中,偶尔会用到 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>,可以直接跟属性取值,更方便
}

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK