Ogni volta che Spring Data Mongo non ha un'operazione di aggregazione necessaria (per riprodurre $addFields
, $redact
...), una soluzione alternativa (alcuni potrebbero dire una soluzione rapida e sporca) consiste nel passare l'aggregazione grezza a Spring, utilizzando direttamente gli strumenti 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() viene passato alla pipeline di aggregazione come List<Document>
(infatti List<? extends Bson>
in forma grezza come suggerito sopra usando Document.parse(), e ovviamente puoi anche usare new Document()
per farlo sembrare più simile al codice OOP corretto. Tendo a utilizzare la forma grezza quando l'aggregazione grezza è complessa o poiché molti componenti nidificati per il documento nidificato sono troppo dettagliati per me, ma è una questione di gusti.
AGGIORNAMENTO 2020.
Usa questa soluzione alternativa invece. Con questo è facile utilizzare sia AggregationOperation fornita da Spring che le tue fasi di aggregazione "grezze" nello stesso posto.