Java 通过Spring MongoTemplate聚合以获取集合的最大值
我想按最近的日期查找用户(假设Java 通过Spring MongoTemplate聚合以获取集合的最大值,java,spring,mongodb,spring-data,spring-mongodb,Java,Spring,Mongodb,Spring Data,Spring Mongodb,我想按最近的日期查找用户(假设User对象有一个date字段)。数据存储在MongoDB中,并通过SpringMongoTemplate进行访问。 原始数据的示例: {userId:1, date:10} {userId:1, date:20} {userId:2, date:50} {userId:2, date:10} {userId:3, date:10} {userId:3, date:30} 查询应该返回 {{userId:1, date:20}, {userId:2, date:
User
对象有一个date
字段)。数据存储在MongoDB中,并通过SpringMongoTemplate进行访问。
原始数据的示例:
{userId:1, date:10}
{userId:1, date:20}
{userId:2, date:50}
{userId:2, date:10}
{userId:3, date:10}
{userId:3, date:30}
查询应该返回
{{userId:1, date:20}, {userId:2, date:50}, {userId:3, date:30}}
Ïam使用的聚合方法是
db.table1.aggregate({$group:{'_id':'$userId', 'max':{$max:'$date'}}},
{$sort:{'max':1}}).result
您可以先按日期描述对其进行排序,然后在按用户ID分组时选择第一个
final Aggregation aggregation = newAggregation(
Aggregation.sort(Sort.Direction.DESC, "date"),
Aggregation.group("userId").first("date").as("Date")
);
final AggregationResults<User> results = mongoTemplate.aggregate(aggregation, "user", User.class);
final Aggregation=newAggregation(
聚合.sort(sort.Direction.DESC,“日期”),
聚合。组(“用户ID”)。第一个(“日期”)。作为(“日期”)
);
最终聚合结果=mongoTemplate.aggregate(聚合,“用户”,用户.class);
在预期结果中,用户ID 3有两个条目-这是故意的吗?此外,您使用的聚合将按日期对结果进行排序,但您预期的结果是按ID排序的-您想要哪一个?newAggregation是一个静态工厂方法,我们将聚合操作列表传递给它。