You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中使用MongoDB Aggregation GroupOperation实现条件分组统计查询

MongoDB 条件分组聚合Java实现方案

1. Spring Data MongoDB 实现(最常用)

该方案使用Spring Data MongoDB提供的Aggregation、GroupOperation相关API实现,和你给出的原生查询逻辑完全对应:

import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.GroupOperation;
import static org.springframework.data.mongodb.core.aggregation.ConditionalOperators.when;
import static org.springframework.data.mongodb.core.aggregation.ComparisonOperators.Eq.valueOf;

// 构造分组操作
GroupOperation groupOperation = Aggregation.group("categoryCode", "categoryName")
        .sum(
                // 对应原生$cond条件判断
                when(valueOf("cat_type").equalToValue("A"))
                        .then(1)
                        .otherwise(0)
        )
        .as("cat_count"); // 统计结果别名对应原生的cat_count

逻辑对应说明

  • Aggregation.group("categoryCode", "categoryName") 对应原生$group的_id部分,会自动按照两个字段组合分组
  • 嵌套的when...then...otherwise结构对应原生的$cond+$eq组合逻辑,判断cat_type等于"A"时返回1,否则返回0,累加后即为符合条件的记录数
    后续可以将该GroupOperation加入聚合管道,通过mongoTemplate.aggregate()方法执行查询即可。

2. MongoDB官方原生Java驱动实现

如果你没有使用Spring框架,直接使用官方Java驱动可以参考如下写法:

import com.mongodb.client.model.Accumulators;
import com.mongodb.client.model.Aggregates;
import org.bson.Document;

// 构造分组聚合阶段
Document groupId = new Document("categoryCode", "$categoryCode")
        .append("categoryName", "$categoryName");
Document condExpr = Document.parse("{$cond: [{$eq: ['$cat_type', 'A']}, 1, 0]}");
var groupStage = Aggregates.group(groupId, Accumulators.sum("cat_count", condExpr));

内容的提问来源于stack exchange,提问作者prabhakar srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:48:00