如何用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
相关产品推荐
相关产品推荐

