java - spring data mongodb - 日期聚合

标签 java spring mongodb spring-data aggregate

以下代码没有给出预期的结果,我已经尝试过多个文档,这些文档的结构如下。

_id: 5a7714d44c75220958e6aa01
imei:355227045347655
point: [3.143453333333333,80.10954]
heading: 0
speed:0
timestamp: 2018-02-04 19:42:36.000
point_distance: 525.25

现在我需要计算给定 imei 和时间段的每个记录匹配的 point_distance 总和。我尝试使用以下代码来实现此目的,但即使存在所需的数据也不会返回任何内容。

public Object findDistance(long imei, Date from, Date to) {
    List aggregationOps = new ArrayList<>();
    //operations
    aggregationOps.add(match(Criteria.where("imei").is(imei)));
    aggregationOps.add(match(Criteria.where("timestamp").gte(from)));
    aggregationOps.add(match(Criteria.where("timestamp").lte(to)));
    aggregationOps.add(group("imei").sum("point_distance").as("distance"));
    aggregationOps.add(project("imei").and("distance").previousOperation());

    AggregationOptions agOps = new AggregationOptions.Builder().allowDiskUse(true).cursor(new BasicDBObject()).build();

    return (DistanceInfo) getMongoTemplate()
            .aggregate(newAggregation(aggregationOps).withOptions(agOps), Location.class, DistanceInfo.class)
            .getUniqueMappedResult();
}

日期 > fromto 格式为 yyyy-MM-dd hh:mm:ss

DistanceInfo

public class DistanceInfo {
    long imei;
    double distance;
}

我是 mongodb 的新手,不知道我做错了什么,我该如何纠正这个问题?非常感谢任何帮助。

最佳答案

试试这个。这应该有效

MatchOperation matchOperation = match(Criteria.where("imei").is(imei) 
     .and("timestamp").gte(from.getTime()).lte(to.getTime()));

GroupOperation groupOperation = group("imei").sum("point_distance").as("distance");
ProjectionOperation projectionOperation = project().andExpression("imei").as("imei")
    .andExpression("distance").as("distance");

Aggregation aggregation = newAggregation(matchOperation, groupOperation, projectionOperation);
AggregationResults<DistanceInfo> results = mongoTemplate.aggregate(aggregation, "location", DistanceInfo.class);

return  results.getMappedResults();

关于java - spring data mongodb - 日期聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48610377/

相关文章:

java - JTextField 大小随 JLabel 文本长度变化

javascript - 如何在温度计D3.js上显示动态值

java - Spring MVC Hibernate 错误 java.lang.Object;无法转换为 model.Employee

spring - @Document(collection = "Test") 在 MongoRepository 中不起作用 - Spring 数据 - mongodb

python - 接受 POST 和 GET 的搜索屏幕

java - 图像处理: averaging filter on a grayscale image

java - Maven放在JAR文件中的POM文件有什么意义,有什么用吗?

spring - 从 tomcat 6 切换到 tomcat 7 时启动 spring 应用程序时出现错误日志

javascript - 在 mongoose 中按 _id 值范围选择文档

java - 有没有办法在java中找到正在运行的计时器?