Chaque fois que Spring Data Mongo manque d'une AggregationOperation dont vous avez besoin (pour reproduire $addFields
, $redact
...), une solution de contournement (certains diront une solution rapide et sale) consiste à passer l'agrégation brute à Spring, en utilisant directement les outils com.mongodb.client :
String collectionName = mongoTemplate.getCollectionName(Payment.class);
MongoCollection<Document> collection = mongoClient.getDatabase(mongoTemplate.getDb().getName()).getCollection(collectionName);
AggregateIterable<Document> ai = collection.aggregate(Arrays.asList(
Document.parse(/* { "group" : { ... } } */)))
MongoCollection.aggregate() est transmis au pipeline d'agrégation en tant que List<Document>
(en fait List<? extends Bson>
sous forme brute comme suggéré ci-dessus en utilisant Document.parse(), et vous pouvez bien sûr également utiliser new Document()
pour le faire ressembler davantage à un code OOP approprié. J'ai tendance à utiliser la forme brute lorsque l'agrégation brute est complexe ou que de nombreux composants imbriqués pour un document imbriqué sont trop verbeux pour moi, mais c'est une question de goût.
MISE À JOUR 2020.
Utilisez cette solution de contournement Au lieu. Avec cela, il est facile d'utiliser à la fois AggregationOperation fourni par Spring et vos propres étapes d'agrégation "brutes" au même endroit.