Всеки път, когато на Spring Data Mongo липсва AggregationOperation, от която се нуждаете (за възпроизвеждане на $addFields
, $redact
...), заобиколно решение (някои може да кажат бързо и мръсно решение) е да прехвърлите необработеното агрегиране на Spring, като използвате директно инструментите 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() се предава на тръбопровода за агрегиране като List<Document>
(всъщност List<? extends Bson>
в сурова форма, както е предложено по-горе, като използвате Document.parse() и можете, разбира се, да използвате и new Document()
за да изглежда повече като правилен OOP код. Склонен съм да използвам необработената форма, когато необработеното агрегиране е сложно или тъй като много вложени компоненти за вложен документ са твърде многословни за мен, но това е въпрос на вкус.
АКТУАЛИЗАЦИЯ 2020.
Използвайте това заобиколно решение вместо. С това е лесно да използвате както AggregationOperation, предоставена от Spring, така и вашите собствени „сурови“ етапи на агрегиране на едно и също място.