首页 > 解决方案 > 使用 Spring MongoDB 创建聚合查询 | 将小时数添加到投影中的日期

问题描述

我想在我的 Spring Boot 应用程序中创建一个聚合查询。

询问:

db.mycollection.aggregate(
{ 
  $match : { 
    timeStamp: {$gte: ISODate("2020-07-13T00:00:00.000Z"), $lt: ISODate("2020-07-13T23:59:59.000Z")} 
  }
},
{ "$project": {
      "h":{"$hour": { "$add": [ "$timeStamp", 5.5 * 60 * 60 * 1000 ] }}
  }},
{ "$group":{
      "_id": "$h",
      "total":{ "$sum": 1}
  }
}
)

我在我的 Spring Boot 应用程序中创建了以下 Aggregation 对象

Aggregation violationHourlyData = Aggregation.newAggregation(
                        Aggregation.match(Criteria.where("timeStamp").gte(fromDate).lte(toDate)),
                        Aggregation.project("_id").andExpression( "hour(timeStamp)").as("h"),
                        Aggregation.group("h").count().as("count")
                );

在上面的对象中,我想在查询中提到的 timeStamp 中添加一些时间。

谢谢

标签: mongodbspring-bootaggregation-frameworkspring-data-mongodb

解决方案


通过详细理解andExpression()找到了答案。

回答:

Aggregation violationHourlyData = Aggregation.newAggregation(
         Aggregation.match(Criteria.where("timeStamp").gte(fromDate).lte(toDate)),
         Aggregation.project("_id").andExpression(  "hour(add(timeStamp, 5.5 * 60 * 60 * 1000))").as("h"),
         Aggregation.group("h").count().as("count")
                );

推荐阅读