如何获取Mongo标准中两个日期值之间的差异?

时间:2015-02-19 12:28:19

标签: java spring mongodb spring-mvc criteria

如何获取Mongo标准中两个日期值之间的差异,并且返回值必须是两个日期的差异(即10.01.2015第1个日期和20.01.2015是第二个日期)我需要将值设为10?任何人都可以帮助我如何使用spring framework critieria在java中获取它?)

2 个答案:

答案 0 :(得分:1)

在本文What's new in Spring Data MongoDB 1.4 M1中,您可以使用andExpression来获取两个日期值之间的差异:

.andExpression("endDateTime - startDateTime").as("duration")

作为一个例子(未经测试):

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

TypedAggregation<Trip> agg = newAggregation(Trip.class,
  match(Criteria.where("userId").is("54e5cead3ab5c1dd97422d86")),
  project("endDateTime", "startDateTime")
    .andExpression("endDateTime - startDateTime").as("duration")
);

AggregationResults<DBObject> result = mongoTemplate.aggregate(agg, DBObject.class);
List<DBObject> resultList = result.getMappedResults();

在Mongo shell中,您可以执行以下操作:

db.collection.aggregate( {$match:{ your-match } },
     { $group : { 
         _id : "$userId",
         duration : { $subtract:["$endDateTime", "$startDateTime"]}},
     } } );

答案 1 :(得分:0)

建议您不要在投影内部使用减号运算,而建议在投影管道内部使用ArithmaticOperation.Subtract。

ProjectionOperation projectionOperation=Aggregation.project().and(Subtract.valueOf(Date.from(Instant.now())).subtract("fieldname"));