Mongodb在CSharp里实现Aggregate
今天主要用了一个mongodb.driver里的分组,事实上在网上介绍这方面的文章非常少,以至于我在出现问题后,无法找到一个正确的解决方案,最后还是通过异常信息找到的解决方法,所以感觉自己更应该去写一篇关于如何在C#驱动里进行聚合Aggregate的文章!
/// <summary>
/// 返回UI消息树
/// </summary>
/// <returns></returns>
public static string GetMongoLog(DateTime? fromDate, DateTime? toDate, int page = )
{
string from = DateTime.Now.Date.ToString("yyyy-MM-dd");
string to = DateTime.Now.Date.AddDays().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 * + "}"));
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()[].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的对象供聚合使用!

感谢各位的阅读,希望文章可以帮助大家!
Mongodb在CSharp里实现Aggregate的更多相关文章
- MongoDB学习day06--高级查询aggregate聚合管道和nodejs操作aggregate
		
一.MongoDB聚合管道(Aggregation Pilpeline) 使用聚合管道可以对集合中的文档进行变换和组合. 主要功能:表的关联查询.数据统计 二.aggregate 管道操作符与表达式 ...
 - mongodb group操作 以及管道 aggregate 分组排序分页
		
分组获取数据: db.express_info.group({ "key":{"express_code":true}, "initial" ...
 - mongodb基础学习13-聚集aggregate操作
		
aggregate可以用的操作与sql的对应关系 下面来看具体操作例子: 分组求和: 求总记录数 商品价格大于50记录分组求和 商品价格大于50且分组记录大于2的分组记录条件 分组库存数,并按库存排序 ...
 - mongodb复制集里查看主从操作日志oplog
		
MongoDB的replica set架构是通过一个日志来存储写操作的,这个日志就叫做 oplog .oplog.rs 是一个固定长度的 Capped Collection,它存在于local数据库中 ...
 - Mongodb 删除记录里的某个字段
		
//例如要把User表中address字段删除 db.User.update({},{$unset:{'address':''}},false, true)
 - MongoDB学习笔记系列~目录
		
MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...
 - C# .NET Core 3.1中使用 MongoDB.Driver 更新嵌套数组元素和关联的一些坑
		
C# .NET Core 3.1中使用 MongoDB.Driver 更新数组元素和关联的一些坑 前言: 由于工作的原因,使用的数据库由原来的 关系型数据库 MySQL.SQL Server 变成了 ...
 - 豆瓣电影top250爬取并保存在MongoDB里
		
首先回顾一下MongoDB的基本操作: 数据库,集合,文档 db,show dbs,use 数据库名,drop 数据库 db.集合名.insert({}) db.集合名.update({条件},{$s ...
 - MongoDB 之 aggregate $group 巧妙运用
		
有这样一组数据: { "campaign_id": "A", "campaign_name": "A", "s ...
 
随机推荐
- go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin
			
nsqlookupd: 官方文档解释见:http://bitly.github.io/nsq/components/nsqlookupd.html 用官方话来讲是:nsqlookupd管理拓扑信息,客 ...
 - bzoj3435 [Wc2014]紫荆花之恋
			
如果这棵树不变的话,就是一个裸的点分树套平衡树,式子也很好推$di+dj<=ri+rj$,$ri-di>=dj-rj$ 平衡树维护$dj-rj$,然后查$ri-di$的$rank$即可. ...
 - BZOJ_3685_普通van Emde Boas树_权值线段树
			
BZOJ_3685_普通van Emde Boas树_权值线段树 Description 设计数据结构支持: 1 x 若x不存在,插入x 2 x 若x存在,删除x 3 输出当前最小值,若不存 ...
 - 【小白学C#】谈谈C#多播委托因异常而终止的解决方案
			
一.前言 前几天,马三在与朋友闲聊技术的时候,朋友忽然抛出一个问题,把马三难倒了,本着求知的精神,回来以后马三就查阅了相关资料并做了一些实验,终于把问题搞明白了,因此写下本篇博客记录一下.首先,问题是 ...
 - 【毕业原版】-《贝德福特大学毕业证书》Bedfordhire一模一样原件
			
☞贝德福特大学毕业证书[微/Q:865121257◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归& ...
 - BZOJ1500 [NOI2005]维修数列-fhq_Treap
			
题面见这里 反正是道平衡树,就拿 fhq_Treap 写了写... 这道题思路基本是围绕“用 Treap 维护中序遍历” 和 中序遍历的性质 来进行的操作 所以就可以类比线段树进行一些操作 1. 建树 ...
 - RVM 安装 Ruby
			
RVM 是一个命令行工具,可以提供一个便捷的多版本 Ruby 环境的管理和切换. https://rvm.io/ 如果你打算学习 Ruby / Rails, RVM 是必不可少的工具之一. 这里所有的 ...
 - [区块链] 密码学——Merkle 树
			
在计算机领域,Merkle树大多用来进行完整性验证处理.在处理完整性验证的应用场景中,特别是在分布式环境下进行这样的验证时,Merkle树会大大减少数据的传输量以及计算的复杂度. Merkle哈希树是 ...
 - forEach循环对集合进行循环时,需判断是否为null;
			
分析forEach的源码会发现:foreach源码例子: public class Foreach { public static void main(String[] args) { List< ...
 - 安卓开发笔记(十三):SQLite数据库储存(下)数据的增添,更改,删除,查询
			
SQLite数据库存储(下) 1.增添数据 对于添加数据的话我们只需要在主活动当中import新的包以及在主活动当中写上适当的代码就可以了,不需要在我们之前创建新的类当中书写新的代码.现在的主活动 ...