我有一个函数接收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
。
答案 0 :(得分:4)
简短回答:不,没有好方法可以做到。
没有' easy'从AggregationOperation
实例外部获取Aggregation
列表的方式 - operations
是Aggregation
类的受保护属性。
你可以通过反射轻松获得它,但这样的代码将是脆弱的并且维护起来很昂贵。可能有这个属性保持受保护的充分理由。您可以在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 ;
将为您提供所有应用操作。