Java MongoDB聚合差异在天数差异匹配时匹配
如果天数=一个数字和$acceptedDate之间的差值大于$liveDate-x天,则此聚合的变化会是什么,以获得结果或项目Java MongoDB聚合差异在天数差异匹配时匹配,java,mongodb,spring-data-mongodb,spring-mongodb,Java,Mongodb,Spring Data Mongodb,Spring Mongodb,如果天数=一个数字和$acceptedDate之间的差值大于$liveDate-x天,则此聚合的变化会是什么,以获得结果或项目 AggregationOperation redact = new AggregationOperation() { @Override public DBObject toDBObject(AggregationOperationContext aggregationOperationContext) { Map
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
]}"
);
与gte相比,它不是$eq吗?因为它与特定的天数相匹配?