Mongodb在CSharp里實(shí)現(xiàn)Aggregate實(shí)例
今天主要用了一個(gè)mongodb.driver里的分組,事實(shí)上在網(wǎng)上介紹這方面的文章非常少,以至于我在出現(xiàn)問(wèn)題后,無(wú)法找到一個(gè)正確的解決方案,最后還是通過(guò)異常信息找到的解決方法,所以感覺(jué)自己更應(yīng)該去寫(xiě)一篇關(guān)于如何在C#驅(qū)動(dòng)里進(jìn)行聚合Aggregate的文章!
/// <summary> /// 返回UI消息樹(shù) /// </summary> /// <returns></returns> public static string GetMongoLog(DateTime? fromDate, DateTime? toDate, int page = 1) { string from = DateTime.Now.Date.ToString("yyyy-MM-dd"); string to = DateTime.Now.Date.AddDays(1).ToString("yyyy-MM-dd"); if (fromDate.HasValue) { from = fromDate.Value.ToString("yyyy-MM-dd"); } if (toDate.HasValue) { to = toDate.Value.ToString("yyyy-MM-dd"); } var stages = new List<IPipelineStageDefinition>(); stages.Add(new JsonPipelineStageDefinition<BsonDocument, BsonDocument>("{$match:{AddTime:{$gt:ISODate('" + from + "'),$lt:ISODate('" + to + "')}}}")); stages.Add(new JsonPipelineStageDefinition<BsonDocument, BsonDocument>("{$group:{_id: \"$RootId\", count: {$sum: 1}}}")); stages.Add(new JsonPipelineStageDefinition<BsonDocument, BsonDocument>("{$skip:" + page * 5 + "}")); stages.Add(new JsonPipelineStageDefinition<BsonDocument, BsonDocument>("{$limit:5}")); var pipeline = new PipelineStagePipelineDefinition<BsonDocument, BsonDocument>(stages); var result = NoSql.MongodbManager<LoggerContext>.Collection.Aggregate(pipeline); StringBuilder str = new StringBuilder(); str.Append("<ol class='treeMsg'>"); foreach (var item in result.ToList()) { var timer = new List<DateTime>(); var old = NoSql.MongodbManager<LoggerContext>.Instance.Find(i => i.RootId == item.Values.ToArray()[0].ToString() && i.ParentId == null).FirstOrDefault(); timer.Add(old.AddTime); str.Append("<li style='margin:5px;border:1px dashed #aaa'>"); str.AppendFormat("<span style='color:red;'>{0}</span><span style='color:green'>{1}</span><span>{2}</span>" , old.Url , old.MessageBody , old.AddTime); MsgTree(str, old.ChildId, timer); str.AppendFormat("<p><b><em>本次請(qǐng)求用時(shí){0}毫秒({1}秒)<em></b></p>" , (timer.Max() - timer.Min()).TotalMilliseconds , (timer.Max() - timer.Min()).TotalSeconds); str.Append("</li>"); } str.Append("</ol>"); return str.ToString(); }
注意,目前mongodb for C#這個(gè)驅(qū)動(dòng),在進(jìn)行Aggregate時(shí),只支持BsonDocument類(lèi)型,也就是說(shuō),你的集合collection也必須返回的是BsonDocument,而實(shí)體類(lèi)型是不可以被認(rèn)出的,這點(diǎn)要注意.
也正是如此,所以我們的mongo封裝時(shí),別忘記公開(kāi)一個(gè)BsonDocument的對(duì)象供聚合使用!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#中ExecuteNonQuery()返回值注意點(diǎn)分析
這篇文章主要介紹了C#中ExecuteNonQuery()返回值注意點(diǎn)分析,對(duì)于C#數(shù)據(jù)庫(kù)程序設(shè)計(jì)有很大的借鑒價(jià)值,需要的朋友可以參考下2014-08-08C#中一些你可能沒(méi)用過(guò)的調(diào)試窗口的方法
其他窗口比較常用,就不介紹了,是不是有一些你沒(méi)用到的窗口呢?2013-05-05vs2005中總是保留最近打開(kāi)的項(xiàng)目和文件的記錄
這篇文章主要介紹了vs2005中總是保留最近打開(kāi)的項(xiàng)目和文件的記錄,需要的朋友可以參考下2016-06-06C#實(shí)現(xiàn)寫(xiě)入與讀出文本文件的實(shí)例代碼
本篇文章是對(duì)使用C#實(shí)現(xiàn)寫(xiě)入與讀出文本文件的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Unity實(shí)現(xiàn)物體運(yùn)動(dòng)軌跡的繪制
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)物體運(yùn)動(dòng)軌跡的繪制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09C#實(shí)現(xiàn)合并多張圖片為GIF動(dòng)態(tài)圖
這篇文章主要為大家詳細(xì)介紹了C#如何將把一張又一張的圖片去拼合成一張GIF動(dòng)態(tài)圖片,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12