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# 獲取打印機(jī)當(dāng)前狀態(tài)的方法
C# 獲取打印機(jī)當(dāng)前狀態(tài)的方法,需要的朋友可以參考一下2013-04-04
C#實(shí)現(xiàn)簡(jiǎn)單的Http請(qǐng)求實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單的Http請(qǐng)求的方法,以實(shí)例形式較為詳細(xì)的分析了C#實(shí)現(xiàn)Http請(qǐng)求的具體方法,需要的朋友可以參考下2015-01-01
C#中JSON轉(zhuǎn)為實(shí)體類(lèi)和List以及結(jié)合使用
開(kāi)發(fā)中經(jīng)常遇到將JSON字符串轉(zhuǎn)換為L(zhǎng)ist的需求,下面這篇文章主要給大家介紹了關(guān)于C#中JSON轉(zhuǎn)為實(shí)體類(lèi)和List以及結(jié)合使用的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
C#使用GZipStream實(shí)現(xiàn)文件的壓縮與解壓
這篇文章主要為大家詳細(xì)介紹了C#使用GZipStream實(shí)現(xiàn)文件的壓縮與解壓,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10

