「利用できません」には明確な違いがあります および「実装されたヘルパーメソッドなし」 、そしてそれがここでの本当のケースです。 $stdDevSamp
または$stdDevPop
演算子は、もちろんMongoDB 3.2インスタンスに接続している限り、使用できないという意味ではありません。
本当に必要なのは、AggregationOperation
をサポートするカスタムクラスだけです。 DBObject
を使用した構築を可能にするインターフェース :
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 CustomAggregationOperation(
new BasicDBObject("$sample", new BasicDBObject("size",100))
),
new CustomAggregationOperation(
new BasicDBObject(
"$group",
new BasicDBObject("_id",null)
.append("ageStdDev",new BasicDBObject("$stdDevSamp","$age"))
)
)
);
これは、ドキュメントの例 に相当します。 :
db.users.aggregate(
[
{ "$sample": { "size": 100 } },
{ "$group": { "_id": null, "ageStdDev": { "$stdDevSamp": "$age" } } }
]
)
AggregationOperation
のインターフェースとして クラスは実装されたヘルパーと簡単に組み合わせることができます:
Aggregation aggregation = newAggregation(
// Using the match helper for the `$match` stage
match(
Criteria.where("age").gte(20).lte(50)
),
// Mixed in with custom classes for the others
new CustomAggregationOperation(
new BasicDBObject("$sample", new BasicDBObject("size",100))
),
new CustomAggregationOperation(
new BasicDBObject(
"$group",
new BasicDBObject("_id",null)
.append("ageStdDev",new BasicDBObject("$stdDevSamp","$age"))
)
)
);
そのため、BSONオブジェクトの構築を行うための「バイトインヘルパー」がなくても、機能を使用できます。自分で建設するだけです。