Når Spring Data Mongo mangler en Aggregation Operation, har du brug for (for at reproducere $addFields
, $redact
...), en løsning (nogle vil måske sige en hurtig og beskidt løsning) er at videregive den rå aggregering til Spring ved at bruge com.mongodb.client-værktøjerne direkte :
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() sendes aggregeringspipelinen som List<Document>
(faktisk List<? extends Bson>
i rå form som foreslået ovenfor ved hjælp af Document.parse(), og du kan selvfølgelig også bruge new Document()
for at få det til at ligne den rigtige OOP-kode. Jeg har en tendens til at bruge den rå form, når den rå aggregering er kompleks, eller da mange indlejrede komponenter til indlejrede dokumenter er for meget udførlige for mig, men det er en smagssag.
2020 OPDATERING.
Brug denne løsning i stedet. Med dette er det nemt at bruge både AggregationOperation leveret af Spring og dine egne "rå" aggregeringstrin på samme sted.