참고 : MongoDB를 버전 2.6-3.0 (호환 자바 드라이버)
내가 구현하는 org.springframework.data.mongodb.core.aggregation.AggregationOperation
클래스를 확장 한 사용자 정의 toDBObject
은 방법 :
귀하의 경우
public class GenericAggregationOperation implements AggregationOperation {
private String operator;
private DBObject query;
/**
* Default constructor.
*
* @param operator MongoDB operator ($group, $sort, $project, etc..)
* @param query MongoDB aggregation query step string
*/
public GenericAggregationOperation(String operator, String query) {
this(operator, (DBObject) JSON.parse(query));
}
/**
* Default constructor.
*
* @param operator MongoDB operator ($group, $sort, $project, etc..)
* @param query MongoDB aggregation query step DBObject
*/
public GenericAggregationOperation(String operator, DBObject query) {
this.operator = operator;
this.query = query;
}
@Override
public DBObject toDBObject(AggregationOperationContext context) {
return new BasicDBObject(operator, query);
}
}
, 그것은 다음과 같습니다
List<AggregationOperation> list = new ArrayList<AggregationOperation>();
lista.add(new GenericAggregationOperation("$group", "{ \"_id\": \"$title\", \"versions\": { \"$push\": { \"version\":\"$version\", \"author\":\"$author\", \"dateAdded\":\"$dateAdded\"}} }"));
TypedAggregation<EpisodeIndexDto> agg = Aggregation.newAggregation(
YourClassTitleVersion.class, list);
mongoOperations.aggregate(agg, YourClassTitleVersion.class,
YourClassTitleVersion.class).getMappedResults();
희망이 도움이 될 것입니다.
"문자열 화 된"mongo-shell 쿼리를 넣으려면'AggregationOperation' 클래스를 확장하고'toDBObject' 또는 이와 유사한 메소드 (드라이브 버전에 따라)를 오버라이드하십시오. 네이티브 스프링 데이터와 호환되지 않는 집계 단계의 해결 방법을 많이 사용했습니다. – Valijon
필요하다면 예제를 추가 할 수 있습니다. – Valijon
예를 게시하면 멋질 것입니다. – quiros