【发布时间】:2018-02-04 16:28:50
【问题描述】:
以下代码没有给出预期的结果,我尝试了多个文档,这些文档的结构如下。
_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();
}
Date > from 和 to 被格式化为yyyy-MM-dd hh:mm:ss
DistanceInfo类
public class DistanceInfo {
long imei;
double distance;
}
我是这个 mongodb 的新手,不知道我做错了什么,我该如何纠正?非常感谢任何帮助。
【问题讨论】:
-
不应该是
lte(to)吗? -
已更正,但结果仍然相同
标签: java spring mongodb spring-data aggregate