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