中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

Mongodb在CSharp里(li)實現Aggregate

回到目錄 

今天主要用了一個(ge)mongodb.driver里(li)的(de)(de)分組,事(shi)實上在(zai)網上介(jie)紹這方(fang)面(mian)的(de)(de)文章非常(chang)少,以至于(yu)我(wo)在(zai)出現問題后,無(wu)法(fa)找到(dao)(dao)一個(ge)正(zheng)確的(de)(de)解決方(fang)案,最后還是通過異常(chang)信息找到(dao)(dao)的(de)(de)解決方(fang)法(fa),所以感覺自己更應該去寫一篇(pian)關(guan)于(yu)如何(he)在(zai)C#驅動里(li)進行聚合Aggregate的(de)(de)文章!

        /// <summary>
        /// 返回UI消息(xi)樹
        /// </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&gt;<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>本次請求用時{0}毫秒({1}秒)<em></b></p&gt;"
                    , (timer.Max() - timer.Min()).TotalMilliseconds
                    , (timer.Max() - timer.Min()).TotalSeconds);
                str.Append("</li>");
            }
            str.Append("</ol>");
            return str.ToString();
        }

注意,目前(qian)mongodb for C#這(zhe)個(ge)驅動(dong),在進行Aggregate時,只(zhi)支持BsonDocument類型,也就是說,你的(de)集合(he)collection也必須返回的(de)是BsonDocument,而實體類型是不可以被(bei)認出(chu)的(de),這(zhe)點(dian)要注意.

也正(zheng)是如(ru)此,所以我們的mongo封(feng)裝時,別忘記(ji)公開(kai)一個BsonDocument的對(dui)象供(gong)聚合使(shi)用!

感謝(xie)各位(wei)的(de)閱讀,希望文章可以幫助(zhu)大家(jia)!

 回到目錄

posted @ 2017-05-16 22:42  張占嶺  閱讀(4178)  評論(3)    收藏  舉報