Sempre que o Spring Data Mongo não tiver uma AggregationOperation, você precisa (para reproduzir
$addFields
, $redact
...), uma solução alternativa (alguns podem dizer solução rápida e suja) é passar a agregação bruta para o Spring, usando diretamente as ferramentas 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() é passado para o pipeline de agregação como
List<Document>
(na verdade List<? extends Bson>
na forma bruta como sugerido acima usando Document.parse(), e é claro que você também pode usar new Document()
para torná-lo mais parecido com o código OOP adequado. Eu costumo usar a forma bruta quando a agregação bruta é complexa ou porque muitos componentes aninhados para Document aninhados são muito detalhados para mim, mas isso é uma questão de gosto. ATUALIZAÇÃO 2020.
Use esta solução alternativa em vez de. Com isso, é fácil usar o AggregationOperation fornecido pelo Spring e seus próprios estágios de agregação "brutos" no mesmo local.