如何使用spring数据在mongo聚合中构建$ group的组合_id属性?

时间:2014-11-06 01:35:35

标签: java mongodb mongodb-query aggregation-framework spring-mongo

我在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数据中执行此操作?

1 个答案:

答案 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")
);