欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

Mongodb在CSharp里实现Aggregate实例

时间:2020-11-16 12:07:56|栏目:.NET代码|点击:

今天主要用了一个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的对象供聚合使用!

上一篇:ASP.NET Core 2.1 使用Docker运行的方法步骤

栏    目:.NET代码

下一篇:ASP.Net刷新页面后自动滚动到原来位置方法汇总

本文标题:Mongodb在CSharp里实现Aggregate实例

本文地址:http://www.codeinn.net/misctech/23194.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有