好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Mongodb在CSharp里实现Aggregate实例

今天主要用了一个mongodb.driver里的分组,事实上在网上介绍这方面的文章非常少,以至于我在出现问题后,无法找到一个正确的解决方案,最后还是通过异常信息找到的解决方法,所以感觉自己更应该去写一篇关于如何在C#驱动里进行聚合Aggregate的文章!

?

/// <summary>

     /// 返回UI消息树

     /// </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>本次请求用时{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#这个驱动,在进行Aggregate时,只支持BsonDocument类型,也就是说,你的集合collection也必须返回的是BsonDocument,而实体类型是不可以被认出的,这点要注意.

也正是如此,所以我们的mongo封装时,别忘记公开一个BsonDocument的对象供聚合使用!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://HdhCmsTestcnblogs测试数据/lori/p/6864134.html?utm_source=tuicool&utm_medium=referral

dy("nrwz");

查看更多关于Mongodb在CSharp里实现Aggregate实例的详细内容...

  阅读:46次