2017-04-26 85 views
0

我目前正在對春數據蒙戈DB,我想知道是否有彈簧地板和小區的春數據蒙戈DB任何實現

我有下面的查詢:

db.event.aggregate([{$項目:{ 「isActive」:1, 「diff_msecs」:{$減去: 「$的startDate」,新ISODate()]}}} ,{$ project:{「isActive」:1,「diff_msecs」:1,「diff_days」:{$ floor:{$ divide:[「$ diff_msecs」,1000 * 60 * 60 * 24]}}}},{ $ match:{「isActive」:false,「diff_days」:1}}]);

,並需要解釋$地板彈簧數據聚合

回答

0

可以使用彈簧蒙戈數據1.5.2.RELEASE版本試試下面的聚集。

ArithmeticOperators.Floor floor = ArithmeticOperators.Floor.floorValueOf(ArithmeticOperators.Divide.valueOf("diff_msecs").divideBy(1000 * 60 * 60 * 24)); 
ProjectionOperation project1 = Aggregation.project("isActive").and(aggregationOperationContext -> new BasicDBObject("$subtract", Arrays.asList("$startDate", new Date()))).as("diff_msecs"); 
ProjectionOperation project2 = Aggregation.project("isActive", "diff_msecs").and(floor).as("diff_days"); 
MatchOperation match = Aggregation.match(Criteria.where("isActive").is(false).and("diff_days").is(1)); 
Aggregation agg = newAggregation(project1, project2, match); 

旁註:您可以將過濾器的isActive$match一部分作爲管道的第一階段。如果你不這樣做,MongoDB會優化並將其移動到頂端。