java - Spring mongo聚合按日期范围获取计数和日期

标签 java mongodb spring-boot spring-data aggregation-framework

我想获取在特定日期范围内售出的产品数量。

final TypedAggregation<Product> otpTypedAggregation = newAggregation(Product.class,
                    match(Criteria.where(CREATED_AT).gte(fromDate).lte(toDate)),
                    project(CREATED_AT)
                            .andExpression("dayOfMonth(createdAt)").as("day")
                            .andExpression("month(createdAt)").as("month")
                            .andExpression("year(createdAt)").as("year"),
                    group(fields().and("day").and("month").and("year")).first("sold_at").as("sold_at")
                            .count().as("count"),
                    sort(new Sort(ASC, "sold_at"))
            );
 mongoTemplate.aggregate(otpTypedAggregation, Data.class).getMappedResults();

执行后,我得到这样的输出

[Data(sold_at=Mon Jan 06 04:38:18 IST 2020, count=1), Data(sold_at=Mon Jan 06 10:23:03 IST 2020, count=1), Data(sold_at=Tue Jan 07 09:46:54 IST 2020, count=2)]

但这就是我希望接收数据的方式:

[Data(sold_at=Mon Jan 06 2020, count=2),Data(sold_at=Tue Jan 07 2020, count=2)]

那么如何修改代码才能得到上面的结果呢?

最佳答案

提供示例数据以检查其是否是有效的解决方案。

注意:如果这是有效的解决方案,我可以将其转换为 Spring-Data 语法。

db.product.aggregate([
  {
    $match: {}
  },
  {
    $project: {
      day: {
        $dayOfMonth: "$createdAt"
      },
      month: {
        $month: "$createdAt"
      },
      year: {
        $year: "$createdAt"
      }
    }
  },
  {
    $group: {
      _id: {
        day: "$day",
        month: "$month",
        year: "$year"
      },
      count: {
        $sum: 1
      }
    }
  },
  {
    $project: {
      _id: 0,
      sold_at: {
        $dateFromParts: {
          year: "$_id.year",
          month: "$_id.month",
          day: "$_id.day"
        }
      },
      count: 1
    }
  },
  {
    $sort: {
      sold_at: 1
    }
  }
])

MongoPlayground

关于java - Spring mongo聚合按日期范围获取计数和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59882148/

相关文章:

java - Spring Boot 单元测试配置

java - 如何在整个java类中使用变量

java - 使用 Jsoup 和 Java 选择 div 类标签

mongodb - Spark rdd.count() 产生不一致的结果

java - Spring Boot 服务静态资源 - sitemap.xml

java - 重复的 Spring Batch 作业实例

java - 使用 spring boot 进行 rest webservices 异常处理

java - 为什么我点击的地方不画圆圈

mongodb - 有没有办法查看 MongoDB 的缓存中有什么,什么没有?

java - 如何在java应用服务器中使用MongoClient的一个实例