MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Progettazione e aggregazione dei dati di Spring data mongodb

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.