Es gibt einen deutlichen Unterschied zwischen "nicht verfügbar" und "keine implementierte Hilfsmethode" , und das ist hier der wahre Fall. Nur weil es keinen „Helfer“ für die Implementierung des $stdDevSamp
oder $stdDevPop
Operatoren bedeutet nicht, dass sie nicht verwendet werden können, solange Sie natürlich eine Verbindung zu einer MongoDB 3.2-Instanz herstellen.
Alles, was Sie wirklich brauchen, ist eine benutzerdefinierte Klasse, die AggregationOperation
unterstützt Schnittstelle, die eine Konstruktion mit DBObject
ermöglicht :
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);
}
}
Dann können Sie diese Klasse in der Aggregations-Pipeline-Konstruktion wie folgt verwenden:
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"))
)
)
);
Und das entspricht dem Dokumentationsbeispiel :
db.users.aggregate(
[
{ "$sample": { "size": 100 } },
{ "$group": { "_id": null, "ageStdDev": { "$stdDevSamp": "$age" } } }
]
)
Als Schnittstelle für AggregationOperation
die Klasse mischt sich leicht mit den implementierten Helfern:
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"))
)
)
);
So können Sie auch dann noch Funktionen nutzen, wenn es keinen „eingebauten Helfer“ gibt, der die BSON-Objektkonstruktion für Sie ausarbeitet. Sie bauen einfach selbst.