C'è una netta differenza tra "non disponibile" e "nessun metodo di supporto implementato" , e questo è il caso reale qui. Solo perché non esiste un "helper" per l'implementazione di $stdDevSamp
o $stdDevPop
operatori, non significa che non possano essere utilizzati, a patto che tu ti connetta a un'istanza MongoDB 3.2 ovviamente.
Tutto ciò di cui hai veramente bisogno è una classe personalizzata che supporti AggregationOperation
interfaccia, che consentirà la costruzione utilizzando 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);
}
}
Quindi puoi utilizzare quella classe nella costruzione di pipeline di aggregazione in questo modo:
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"))
)
)
);
E questo è l'equivalente dell'esempio di documentazione :
db.users.aggregate(
[
{ "$sample": { "size": 100 } },
{ "$group": { "_id": null, "ageStdDev": { "$stdDevSamp": "$age" } } }
]
)
Come interfaccia per AggregationOperation
la classe si mescola facilmente con gli helper implementati:
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"))
)
)
);
Quindi puoi ancora utilizzare le funzionalità anche se non esiste un "helper integrato" per elaborare la costruzione dell'oggetto BSON per te. Devi solo fare la costruzione da solo.