Java spring数据mongodb-带日期的聚合
下面的代码没有给出预期的结果,我尝试了多个文档,这些文档的结构如下Java spring数据mongodb-带日期的聚合,java,spring,mongodb,spring-data,aggregate,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和时间段的每个记录匹配的点距离之和。我试图用下面的代码实现这一点,但即使存
_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
和时间段的每个记录匹配的点距离之和。我试图用下面的代码实现这一点,但即使存在所需的数据,也不会返回任何结果
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();
}
我是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();
MatchOperation MatchOperation=match(标准)。其中(“imei”)是(imei)
.and(“timestamp”).gte(from.getTime()).lte(to.getTime());
GroupOperation GroupOperation=组(“imei”).sum(“点距离”).as(“距离”);
ProjectOnOperation ProjectOnOperation=project().andExpression(“imei”).as(“imei”)
.andExpression(“距离”)。表示为(“距离”);
聚合聚合=新聚合(匹配操作、组操作、项目操作);
AggregationResults=mongoTemplate.aggregate(聚合,“位置”,距离信息.class);
返回结果。getMappedResults();
它不应该被lte(to)
纠正,但仍然是相同的结果它返回一个错误命令失败,错误9:“需要'cursor'选项,除了使用解释参数'aggregate'之外,
我正在使用mongodb java驱动程序3.6.1
和spring data mongodb 1.10.9
,在我的机器上运行。我使用的是mongodb驱动程序3.4.3和spring数据mongodb 1.10.8.RELEASE。尝试删除.cursor(new BasicDBObject())
原始代码中的此代码。因此,我必须将spring data
版本升级到1.10.10。发布并使用此解决方案,它起了作用,删除。cursor(new BasicDBObject())
不起作用,感谢您的帮助。
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();