如何在spring-data-mongo aggregate指定多個字段爲_id

mongo在做聚合group操作的時候,經常會遇到 聯合字段唯一的場景。這裏記錄一下,在java中如何寫group語句

        Fields fields = Fields.fields();
        Fields and = fields.and(Fields.field("$userOrder.advisory", "adv")).and(Fields.field("$innerState", "innerState"));


        Field adv = Fields.field("adv", "$_id.advisory");
        Field innerState = Fields.field("innerState", "$_id.innerState");

        Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria), Aggregation.group(and), Aggregation.project(Fields.from(adv, innerState)));

在使用 mongoOperations.aggregate() 執行聚合操作在接受聚合返回是,id無法直接映射爲具體的對象。通過使用project來將id中的字段釋放出來,這樣就可以難道聯合分組的keys了。

//執行聚合 返回類型爲 List<AggregateResult>
mongoOperations.aggregate(aggregation, CollectionClassName.class, AggregateResult.class);

//最終id會是null
class AggregateResult{
   private AggregateResultId id;
     //setter getter ignore
     ... 

}


class AggregateResultId{
   private String adv;
   private String innerState;

   //setter getter ignore
   ...
}

//可行的AggregateResult 
class AggregateResult{
   private String adv;
   private String InnerState;
   //setter getter ignore
   ...
}

 

發佈了25 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章