sun*_*ger 5 java mongodb spring-mongo mongodb-query aggregation-framework
我在 mongodb 文档中找到了这个 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 }
}
}
]
)
Run Code Online (Sandbox Code Playgroud)
使用 spring 数据的聚合时,很容易通过调用 Aggregation.group(Feild ...) 将一个 Document 属性绑定到 $group 中的 _id
但是对于上述情况,_id 属性被组合在一起,我未能在 Java 中构建它。各位大侠有解决办法吗???我的意思是如何用Java表达上面的js??
非常感谢...
@update ..... $group 的 _id 使用 mongo 函数,如 $month $dayOfMonth ... 我怎样才能在 Spring 数据中做到这一点??
您可以尝试首先在投影操作中使用SpELandExpression
来投影字段,然后在分组操作中按新字段进行分组:
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")
);
Run Code Online (Sandbox Code Playgroud)