C#实现mongodb分组统计代码

江湖百晓生2年前 (2022-07-21)c# net core686

业务代码图示

image.png


从上面可以看到已经实现统计分组了,下面详细列出代码:


数据操作底层公共代码:

/// <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();
        }


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。