gpt4 book ai didi

java - 如何使用spring data获取mongodb中最大聚合函数对应的值

转载 作者:行者123 更新时间:2023-11-30 02:54:55 26 4
gpt4 key购买 nike

我的域对象有以下架构

private String pair;
private String lProvider;
private double value;
private DateTime dateTime;

按照我为此创建对象的方式

 new TestMData("EUR", "ABC", 2.5454, DateTime.now().minusYears(3));

我想使用 spring 数据聚合来查找与使用 spring 加重的最大值相对应的日期和时间。

一种方法是我使用聚合获得最大值并使用 findone 方法找到该值,但我认为这不是一个好的方法。 Spring数据是否提供了我可以字段对应于最大值的功能

最佳答案

要通过聚合获取与最大值相对应的日期和时间,您需要在聚合中使用一个排序步骤,该排序步骤通过管道传输到组运算符,在分组中您可​​以使用 $first 运算符在订购时获取顶部文档:

db.collection.aggregate([ 
{ "$sort": { "value": -1 } },
{
"$group": {
"_id": null,
"largestValue": { "$first": "$value" },
"date": { "$first": "$dateTime" }
}
}
])

在 Spring 数据中:

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;

Aggregation agg = newAggregation(
sort(DESC, "value"),
group().first("value").as("largestValue")
.first("dateTime").as("date")
);

AggregationResults<TestMData> results = mongoTemplate.aggregate(agg, "test", TestMData.class);
List<TestMData> testData = results.getMappedResults();

上面应该与find()具有相同的性能, sort() limit() 组合:

db.collection.find().sort( { "value": -1 } ).limit(1)

关于java - 如何使用spring data获取mongodb中最大聚合函数对应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37538097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com