4

내가 MongoDB의 워드 프로세서에서이 몽고 명령 발견

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 } 
     } 
     } 
    ] 
) 

스프링 데이터의 집계를 사용하여, Aggregation.group에 전화로 $ 그룹의 _id 하나 개의 문서 속성을 결합하기 쉽다 (의 feild를 ...)

위의 상황에서 _id 속성이 결합되어서 자바로 빌드하지 못했습니다. 너희들 어떤 해결책있어? Java에서 위의 js를 어떻게 표현합니까?

많은 감사 ...

@update ..... 은 $ 그룹의 _id 나는 봄의 데이터에서이 작업을 수행 할 수있는 방법 ... $에 달 $의 DAYOFMONTH 같은 몽고 함수를 사용?

+0

은 $ 그룹의 _id가 $ 같은 몽고 함수를 사용 month $ dayOfMonth ... 스프링 데이터에서 어떻게 할 수 있습니까 ?? – sunnyfinger

+0

여기에서 느낌. 처음에 이것을 복제본으로 보았지만 확실히 그렇지 않습니다. Spring-Mongo는 그룹화를 위해'_id'의 일부분을 만들기 위해 필요한 연산이 부족한 것으로 보입니다. 내가 분명히 볼 수있는 유일한 것은 별도의'$ project' 연산입니다. 이것은 최적이 아니며, 현재 [optimizer coalescence]도 아닙니다 (http://docs.mongodb.org/manual/core/aggregation-pipeline-optimization/ # pipeline-coalescence-optimization) 도움이됩니다. 올리버 (Oliver)와 같은 사람이이 점에 대해 밝힐 수 있기를 바랍니다. –

답변

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") 
); 
관련 문제