Ada perbedaan mencolok antara "tidak tersedia" dan "tidak ada metode pembantu yang diterapkan" , dan itulah kasus sebenarnya di sini. Hanya karena tidak ada "pembantu" untuk mengimplementasikan $stdDevSamp
atau $stdDevPop
operator, tidak berarti mereka tidak dapat digunakan, selama Anda terhubung ke instance MongoDB 3.2 tentunya.
Yang Anda butuhkan hanyalah kelas khusus yang mendukung AggregationOperation
antarmuka, yang akan memungkinkan konstruksi menggunakan 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);
}
}
Kemudian Anda dapat menggunakan kelas itu dalam konstruksi pipa agregasi seperti:
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"))
)
)
);
Dan itu setara dengan contoh dokumentasi :
db.users.aggregate(
[
{ "$sample": { "size": 100 } },
{ "$group": { "_id": null, "ageStdDev": { "$stdDevSamp": "$age" } } }
]
)
Sebagai antarmuka untuk AggregationOperation
kelas dengan mudah bercampur dengan pembantu yang diimplementasikan:
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"))
)
)
);
Jadi Anda masih dapat menggunakan fitur meskipun tidak ada "pembantu bawaan" untuk mengerjakan konstruksi Objek BSON untuk Anda. Anda hanya melakukan konstruksi sendiri.