更新:
Spring Dataのv2.0以降、これを行うことができます:
SampleOperation matchStage = Aggregation.sample(5);
Aggregation aggregation = Aggregation.newAggregation(sampleStage);
AggregationResults<OutType> output = mongoTemplate.aggregate(aggregation, "collectionName", OutType.class);
元の回答:
spring-mongoのような抽象化レイヤーは、サーバーでリリースされた機能よりも常に遅れをとっています。したがって、パイプラインステージのBSONドキュメント構造を自分で作成するのが最善です。
カスタムクラスで実装する:
public class CustomAggregationOperation implements AggregationOperation {
private DBObject operation;
public CustomAggregationOperation (DBObject operation) {
this.operation = operation;
}
@Override
public DBObject toDBObject(AggregationOperationContext context) {
return context.getMappedObject(operation);
}
}
そして、コードで使用します:
Aggregation aggregation = newAggregation(
new CutomAggregationOperation(
new BasicDBObject(
"$sample",
new BasicDBObject( "size", 15 )
)
)
);
これはAggregationOperation
を実装しているため これは、既存のパイプライン操作ヘルパーメソッドでうまく機能します。つまり:
Aggregation aggregation = newAggregation(
// custom pipeline stage
new CutomAggregationOperation(
new BasicDBObject(
"$sample",
new BasicDBObject( "size", 15 )
)
),
// Standard match pipeline stage
match(
Criteria.where("myDate")
.gte(new Date(new Long("949384052490")))
.lte(new Date(new Long("1448257684431")))
)
);
繰り返しになりますが、すべては1日の終わりにBSONオブジェクトにすぎません。 spring-mongoのクラスメソッドが結果を解釈し、定義されたBSONオブジェクトを正しく取得できるように、インターフェイスラッパーを用意するだけです。