Er is een duidelijk verschil tussen "niet beschikbaar" en "geen geïmplementeerde hulpmethode" , en dat is hier het echte geval. Gewoon omdat er geen "helper" is voor het implementeren van de $stdDevSamp
of $stdDevPop
operators, betekent niet dat ze niet kunnen worden gebruikt, zolang je natuurlijk verbinding maakt met een MongoDB 3.2-instantie.
Het enige dat u echt nodig hebt, is een aangepaste klasse die de AggregationOperation
ondersteunt interface, die constructie mogelijk maakt met behulp van 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);
}
}
Dan kunt u die klasse als volgt gebruiken in de aggregatiepijplijnconstructie:
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"))
)
)
);
En dat is het equivalent van het documentatievoorbeeld :
db.users.aggregate(
[
{ "$sample": { "size": 100 } },
{ "$group": { "_id": null, "ageStdDev": { "$stdDevSamp": "$age" } } }
]
)
Als interface voor AggregationOperation
de klas mengt zich gemakkelijk met de geïmplementeerde helpers:
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"))
)
)
);
U kunt dus nog steeds functies gebruiken, zelfs als er geen "ingebouwde helper" is om de BSON Object-constructie voor u uit te werken. De constructie doe je gewoon zelf.