Java Spring mongo聚合按日期范围获取计数和日期
我想知道在特定日期范围内销售了多少产品Java Spring mongo聚合按日期范围获取计数和日期,java,mongodb,spring-boot,spring-data,aggregation-framework,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)
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 2020, count=2),Data(sold_at=Tue Jan 07 2020, count=2)]
那么如何修改代码以获得上述结果呢?提供示例数据以检查它是否是有效的解决方案 注意:如果这是有效的解决方案,我可以将其转换为Spring数据语法
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
}
}
])
提供示例数据以检查其是否为有效解决方案 注意:如果这是有效的解决方案,我可以将其转换为Spring数据语法
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
}
}
])
按天分组-月-年不同于年-月-日;我认为,这些字段的分组方式不同(日期字段的顺序)。您希望在一个月内按天分组,在一年内按月分组。@prasad_u我只想在一个日期内销售所有产品,但我得到的是在DateTime内销售了多少产品。您能够从Mongo Shell或Compass运行聚合查询吗?你能用几份输入文件来更新帖子吗?按天分组-月-年不同于年-月-日;我认为,这些字段的分组方式不同(日期字段的顺序)。您希望在一个月内按天分组,在一年内按月分组。@prasad_u我只想在一个日期内销售所有产品,但我得到的是在DateTime内销售了多少产品。您能够从Mongo Shell或Compass运行聚合查询吗?你能用两个输入文档样本更新帖子吗?