如何在spring-data-mongo aggregate指定多个字段为_id

半世苍凉 提交于 2020-01-10 17:39:06

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
   ...
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!