Mongodb分组统计

db.getCollection("table111").aggregate(
    // Pipeline
    [
        // Stage 1,匹配数据
        {
            $match: { $and : [ { "status" : "SUCCESS" }, { "createTime" : { $gte : ISODate("2023-03-14T00:00:00.134+0000") } }, { "createTime" : { $lte : ISODate("2023-03-14T23:59:59.134+0000") } } ] }
        },
        // Stage 2,按照时间格式化并分组
        {
            $project: {
                // specifications
                字段1:1,
                字段2:1,
                statisticDate:{
                    $dateToString: {
                        //            format: "%Y-%m-%d %H:%M:%S",
                                    format: "%Y-%m-%d",
                                    date: "$createTime"
                                }
                }
            }
        },
        // Stage 3,多字段分组
        {
            $group: 
            {
                _id: {"字段1名":"$字段1", "字段2名":"$字段2", "project中的字段statisticDate":"$statisticDate"},
                count: { "$sum" : 1 },
            }
        }
    ],
    // Options
    {

    }
);

Java代码:

Criteria criteria = Criteria.where("status").is("SUCCESS");
MatchOperation match = Aggregation.match(criteria);
ProjectionOperation project = Aggregation.project("字段1", "字段2", "statisticDate").andExpression("{$dateToString: {format: '%Y-%m-%d',date: '$createTime'}}").as("statisticDate");
GroupOperation groupOperation = Aggregation.group(Fields.fields("字段1", "字段2", "project中的字段statisticDate")).count().as("count");
Aggregation aggregation = Aggregation.newAggregation(match, project, groupOperation);
List<JSONObject> mappedResults = mongoTemplate.aggregate(aggregation, xxx.class, JSONObject.class).getMappedResults();

查询得到数据格式:

[
    {
        "count": 42,
        "_id": {
            "字段1": "aaa",
            "字段2": "aaaaa",
            "statisticDate": "2023-02-17"
        }
    },
    {
        "count": 1,
        "_id": {
            "字段1": "bbb",
            "字段2": "bbbbb",
            "statisticDate": "2023-02-20"
        }
    }
]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB中,分组操作可以通过使用聚合管道来实现。聚合管道是一系列的阶段,每个阶段都会对输入的文档进行处理,并将结果传递给下一个阶段。 例如,可以使用$group操作符来分组文档。在分组操作中,可以根据指定的字段对文档进行分组,并对每个分组进行统计、计算等操作。以下是一个示例: db.collection.aggregate([ { $group: { _id: "$fieldname", count: { $sum: 1 } } } ]) 在上面的示例中,$group操作符用于按fieldname字段对文档进行分组分组后,可以使用其他操作符(如$sum、$avg、$push等)对每个分组进行统计操作。 此外,使用$project操作符可以选择性地展示分组后的字段。例如,如果只想展示分组字段,可以这样操作: db.collection.aggregate([ { $group: { _id: "$fieldname" } }, { $project: { _id: 1 } } ]) 在这个示例中,通过$project操作符将只展示_id字段,其他字段将不会被展示。 总结起来,MongoDB中的分组操作可以通过聚合管道中的$group操作符来实现,并可以使用其他操作符来对分组后的数据进行统计和计算。同时,可以使用$project操作符选择性地展示分组后的字段。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MongoDB 分组统计](https://blog.csdn.net/raqsoft/article/details/87003879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MongoDB分组查询、聚合查询](https://blog.csdn.net/zhuocailing3390/article/details/122706432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值