C#实现mongodb分组统计代码
业务代码图示
从上面可以看到已经实现统计分组了,下面详细列出代码:
数据操作底层公共代码:
/// <summary> /// 查询数据集,可分组统计,不能分页 /// </summary> /// <param name="CollectionName">数据集名</param> /// <param name="pdf">查询条件或分组数据</param> /// <returns></returns> public async Task<List<BsonDocument>> GetDataJsonListGroup(string CollectionName, PipelineDefinition<BsonDocument, BsonDocument> ppdf) { try { var colt = Collection(CollectionName); var rtn = await colt.AggregateAsync(ppdf); return rtn.ToList(); } catch { return null; } }
数据访问代码:
/// <summary> /// 获取短信分组统计 /// </summary> /// <param name="pipeline"></param> /// <returns></returns> public async Task<List<BsonDocument>> GetSmsSendGroup(PipelineDefinition<BsonDocument, BsonDocument> ppdf) { var rtn = await mgdb.GetDataJsonListGroup("tbSmsSendRecord", ppdf); return rtn; }
业务代码:
/// <summary> /// 分组统计短信发送记录 /// </summary> /// <param name="begintime">开始时间</param> /// <param name="endtime">结束时间</param> /// <returns></returns> public async Task<string> GetSmsSendGroup(string begintime, string endtime) { //$SmsType 分组字段 string groupjson = "{$group:{\"_id\":\"$SmsType\",\"RrcordCount\": {\"$sum\":1}}}"; string matchjson = "{$match:{\"SendTime\":{$gte:\"" + Convert.ToDateTime(begintime).ToString("yyyy-MM-dd HH:mm:ss") //开始时间 + "\",$lte:\"" + Convert.ToDateTime(endtime).ToString("yyyy-MM-dd HH:mm:ss") //结束时间 + "\"}}}"; IList<IPipelineStageDefinition> stages = new List<IPipelineStageDefinition> { new JsonPipelineStageDefinition<BsonDocument, BsonDocument>(matchjson), //查询条件 new JsonPipelineStageDefinition<BsonDocument, BsonDocument>(groupjson) //分组统计字段 }; var ppdf = new PipelineStagePipelineDefinition<BsonDocument, BsonDocument>(stages); var rtn = await new DAL.Emergency.SmsSendRecord().GetSmsSendGroup(ppdf); return rtn.ToJson(); }