Spring Mongo>如何从聚合中获取列表AggregationOperations

时间:2017-11-09 12:56:01

标签: java mongodb spring-data-mongodb spring-mongodb

我有一个函数接收Aggregation aggregation作为参数。

我想从AggregationOperation获取所有aggregation。有没有办法做到这一点?

public Aggregation newCustomAggregation(Aggregation aggregation, Criteria c) {
    // How to get list operation aggregation there?
    listOperation.push(Aggregation.match(c));
    return Aggregation
            .newAggregation(listOperations);
}

我的目的是使用我的自定义Aggregation新增MatchAggregation

3 个答案:

答案 0 :(得分:4)

简短回答:不,没有好方法可以做到。

没有' easy'从AggregationOperation实例外部获取Aggregation列表的方式 - operationsAggregation类的受保护属性。

你可以通过反射轻松获得它,但这样的代码将是脆弱的并且维护起来很昂贵。可能有这个属性保持受保护的充分理由。您可以在Spring-MongoDB's JIRA中询问此事。我认为有另一种方法。

您当然可以更改您的方法,将AggregationOperation的集合作为参数,但您的帖子中有太多的信息,以说明此解决方案是否可行。

答案 1 :(得分:4)

您可以通过继承聚合来访问受保护的操作字段来创建自己的自定义聚合实现。

这样的东西
public class CustomAggregation extends Aggregation {
      List<AggregationOperation> getAggregationOperations() {
      return operations;
   }
}

public Aggregation newCustomAggregation(Aggregation aggregation, Criteria c) {
     CustomAggregation customAggregation = (CustomAggregation) aggregation;
     List<AggregationOperation> listOperations = customAggregation.getAggregationOperations();
     listOperations.add(Aggregation.match(c));
     return Aggregation .newAggregation(listOperations);
 }

答案 2 :(得分:2)

Aggregation有一个属性operations,可以在Aggregation中为您提供所有应用操作。

 protected List<AggregationOperation>   allOperations = aggregation.operations ;

将为您提供所有应用操作。