Il y a une nette différence entre "non disponible" et "aucune méthode d'assistance implémentée" , et c'est le cas réel ici. Tout simplement parce qu'il n'y a pas "d'aide" pour implémenter le $stdDevSamp
ou $stdDevPop
opérateurs, ne signifie pas qu'ils ne peuvent pas être utilisés, tant que vous vous connectez à une instance MongoDB 3.2 bien sûr.
Tout ce dont vous avez vraiment besoin est une classe personnalisée prenant en charge AggregationOperation
interface, qui permettra la construction en utilisant 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);
}
}
Ensuite, vous pouvez utiliser cette classe dans la construction du pipeline d'agrégation comme suit :
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"))
)
)
);
Et c'est l'équivalent de l'exemple de documentation :
db.users.aggregate(
[
{ "$sample": { "size": 100 } },
{ "$group": { "_id": null, "ageStdDev": { "$stdDevSamp": "$age" } } }
]
)
En tant qu'interface pour AggregationOperation
la classe se mélange facilement avec les helpers implémentés :
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"))
)
)
);
Ainsi, vous pouvez toujours utiliser des fonctionnalités même s'il n'y a pas d'"assistant intégré" pour élaborer la construction de l'objet BSON pour vous. Vous faites juste la construction vous-même.