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();