MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Design de aplicativos Spring data mongodb e agregação de dados


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.