.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<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>,可以直接跟屬性取值,更方便
}

 註:暫列這兩種查詢吧,後續繼續補充,有問題歡迎指正。

Tags: