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

如何用MongoTemplate实现带max聚合的多字段分组查询

MongoDB聚合查询转MongoTemplate实现方案

对应你给出的MongoDB聚合语句,用Spring的MongoTemplate可以这样实现:

import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.GroupOperation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;

// 假设集合对应实体类为MyEntity,聚合结果用GroupResult接收
public class AggregationDemo {
    private final MongoTemplate mongoTemplate;

    public AggregationDemo(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    public AggregationResults<GroupResult> runGroupAggregation() {
        // 构建分组操作:按somefield.id分组,取_id的最大值并命名为xyz
        GroupOperation groupOp = Aggregation.group("somefield.id")
                .max("_id").as("xyz");

        // 组装聚合管道
        Aggregation aggregation = Aggregation.newAggregation(groupOp);

        // 执行聚合查询
        return mongoTemplate.aggregate(aggregation, "mycollection", GroupResult.class);
    }

    // 用于接收聚合结果的实体类
    public static class GroupResult {
        private String _id; // 对应分组字段somefield.id
        private Object xyz; // 对应_id的最大值,可根据实际类型调整(比如ObjectId)

        // 生成getter、setter方法
        public String get_id() {
            return _id;
        }

        public void set_id(String _id) {
            this._id = _id;
        }

        public Object getXyz() {
            return xyz;
        }

        public void setXyz(Object xyz) {
            this.xyz = xyz;
        }
    }
}

关键对应关系说明:

  • Aggregation.group("somefield.id") 对应MongoDB查询中的 _id: "$somefield.$id",MongoTemplate会自动处理嵌套字段的引用格式
  • .max("_id").as("xyz") 对应查询中的 xyz: { "$max": "$_id" },通过max()指定取最大值的字段,as()设置结果字段名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:30:49