我在mongodb docs中找到了这个mongo命令:
db.sales.aggregate(
[
{
$group : {
_id : { month: { $month: "$date" }, day: { $dayOfMonth: "$date" }, year: { $year: "$date" } },
totalPrice: { $sum: { $multiply: [ "$price", "$quantity" ] } },
averageQuantity: { $avg: "$quantity" },
count: { $sum: 1 }
}
}
]
)
使用spring数据聚合时,很容易将一个Document属性绑定到$ group中的_id,并调用Aggregation.group(Feild ...)
但是对于上述情况,_id属性被合并,我无法在Java中构建它。你们有什么解决方案吗?我的意思是如何在Java中表达上面的j ??
非常感谢...@Update ..... $ group的_id使用mongo函数,比如$ month $ dayOfMonth ...如何在Spring数据中执行此操作?
答案 0 :(得分:0)
您可以先尝试使用投影操作中的 SpEL andExpression
投影字段,然后按组操作中的新字段进行分组:
Aggregation agg = newAggregation(
project()
.andExpression("year(date)").as("year")
.andExpression("month(date)").as("month")
.andExpression("dayOfMonth(date)").as("day")
.andExpression("price * quantity").as("grossPrice"),
group(fields().and("year").and("month").and("day"))
.sum("grossPrice").as("totalPrice")
.avg("quantity").as("averageQuantity")
.count().as("count")
);