此聚合可能会发生什么变化,以获得结果或项目,其中天数 =(数字)和 $acceptedDate 的差异大于 $liveDate - x 天
AggregationOperation redact = new AggregationOperation() {
@Override
public DBObject toDBObject(AggregationOperationContext aggregationOperationContext) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("if", BasicDBObject.parse("{'$gte':[{'$subtract':[{'$ifNull':['$acceptedDate',
{'$date':" + System.currentTimeMillis() + "}]},'$lastVisit' **here minus x days **]},1296000000]}}")); //and the difference is 10 days
map.put("then", "$$KEEP");
map.put("else", "$$PRUNE");
return new BasicDBObject("$redact", new BasicDBObject("$cond", map));
};
Aggregation aggregation = Aggregation.newAggregation(redact);
List<FactoryAcceptance> results = mongoTemplate.aggregate(aggregation, FactoryAcceptance.class, FactoryAcceptance.class).getMappedResults();
基本上,参数作为变体传递,他们希望匹配天数差异(例如显示差异为 5 天的记录),但在这种情况下,lastVisit 应为负 5 天。
最佳答案
您可以使用以下查询。
BasicDBObject.parse("
{'$eq':[
{'$subtract':[
{'$ifNull':['$acceptedDate',{'$date':" + System.currentTimeMillis() + "}]},
{'$subtract':['$lastVisit', 216000000]} // 5 days
]},
432000000 // 10 days
]}"
);
关于java - MongoDB 聚合变化以匹配天数差异匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53900353/