【问题标题】:How to use "$dateToString" in Mongo criteriaQuery (Spring Boot)如何在 Mongo 标准查询(Spring Boot)中使用“$dateToString”
【发布时间】:2018-05-28 12:42:11
【问题描述】:

我使用 SpringBoot(v1.5.10)、SpringData 和 MongoDb;

db.login.aggregate(
[
    { 
        "$match" : {
            "user._id" : NumberLong(204)
        }
    }, 
    { 
        "$group" : {
            "_id" : {
               "datetime" : { $dateToString: { format: "%d-%m-%Y", date: "$datetime"}}, 
                "ip" : "$ip",


            },
             count: { $sum: 1 }   
        }
    }

]);
  • 2011-01-10 算5
  • 2011-01-16 计数 16

        Criteria criteria = Criteria.where("user._id").is(paramuserid).andOperator(
            Criteria.where("datetime").gte(paramfirstdate),
            Criteria.where("datetime").lt(paramseconddate)
                    );
    AggregationOperation match = Aggregation.match(criteria);   
    
    List<AggregationOperation> aggregationoperations = new ArrayList <AggregationOperation>();  
    aggregationoperations.add(match);
    aggregationoperations.add(Aggregation.group("datetime"));  
    AggregationResults<?> aggregationresults = this.mngT.aggregate(Aggregation.newAggregation(aggregationoperations), Login.class, Object.class);
    
  • 2011-01-10 09:00:01 计数 1

  • 2011-01-10 09:15:00 计数 1

Mongo 没有“时间”的聚合组日期时间,我尝试类似的条件查询不起作用,因为组与时间部分。如何在条件查询中使用“$dateToString”

【问题讨论】:

    标签: spring mongodb spring-boot aggregation-framework criteria


    【解决方案1】:

    我解决了。

    Criteria criteria = Criteria.where("user._id").is(paramuserid).andOperator(
                Criteria.where("datetime").gte(paramfirstdate),
                Criteria.where("datetime").lt(paramseconddate)
                        );
        AggregationOperation match = Aggregation.match(criteria);   
    
        List<AggregationOperation> aggregationoperations = new ArrayList <AggregationOperation>();  
        aggregationoperations.add(match);
        aggregationoperations.add(Aggregation.project("ip","datetime").andExpression("datetime").dateAsFormattedString("%d-%m-%Y").as("formateddate"));
        aggregationoperations.add(Aggregation.group("ip","formateddate").count().as("TOT"));
        AggregationResults<?> aggregationresults = this.mngT.aggregate(Aggregation.newAggregation(aggregationoperations), Login.class, Object.class);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 2018-06-02
      • 2022-12-20
      • 2021-08-14
      相关资源
      最近更新 更多