欢迎来到山村网

Mongodb在CSharp里如何实现Aggregate实例

2019-03-09 12:21:00浏览:661 来源:山村网   
核心摘要:今天主要用了一个mongodb.driver里的分组,事实上在网上介绍这方面的文章非常少,以至于我在出现问题后,无法找到一个正确的解决

今天主要用了一个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,而实体类型是不可以被认出的,这点要注意.

Mongodb在CSharp里如何实现Aggregate实例 山村

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

(责任编辑:豆豆)
下一篇:

H3CMagicR2+路由器好用吗?H3C Magic R2+路由器性能详细评测

上一篇:

linux root密码三种找回方法

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com