java - MongoDB 聚合变化以匹配天数差异匹配

标签 java mongodb spring-data-mongodb spring-mongodb

此聚合可能会发生什么变化,以获得结果或项目,其中天数 =(数字)和 $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/

相关文章:

java - 使用 Android SharedPreferences 或 Internal Storage 在本地存储 EditText 字段的值

java - Mac OSX Sierra Play 2.5 Https Localhost - 此站点无法提供安全连接

java - 如何从外部实用程序 jar 正确加载和配置 Spring bean

java - JAXB-RI 编码通用列表给出了不正确的输出

java - 从 Spring MVC Rest 服务抛出的 Jersey REST 客户端捕获异常

mongodb - 如何将 meteor 连接到现有后端?

c# - 日期之间的 MongoDB C# 驱动程序聚合返回空字段

python - 将 Unicode 转换为等效 ASCII (SCRAPY)

spring-data-mongodb - 如何在 Spring Webflux/Reactor Netty Web 应用程序中执行阻塞调用

Spring 数据 : inject 2 repositories with same name but in 2 different packages