Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过Spring MongoTemplate聚合以获取集合的最大值_Java_Spring_Mongodb_Spring Data_Spring Mongodb - Fatal编程技术网

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中,并通过Spring
MongoTemplate进行访问。

原始数据的示例:

{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是一个静态工厂方法,我们将聚合操作列表传递给它。