sql >> Base de Datos >  >> NoSQL >> MongoDB

Spring data mongodb diseño de aplicaciones y agregación de datos

Siempre que Spring Data Mongo carezca de una AggregationOperation que necesita (para reproducir $addFields , $redact ...), una solución alternativa (algunos pueden decir que es una solución rápida y sucia) es pasar la agregación sin procesar a Spring, usando directamente las herramientas 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() se pasa a la canalización de agregación como List<Document> (de hecho, List<? extends Bson> en forma cruda como se sugirió anteriormente usando Document.parse(), y por supuesto también puede usar new Document() para que se parezca más al código OOP adecuado. Tiendo a usar el formulario sin procesar cuando la agregación sin procesar es compleja o cuando muchos componentes anidados para documentos anidados son demasiado detallados para mí, pero eso es cuestión de gustos.

ACTUALIZACIÓN 2020.

Utilice esta solución alternativa en cambio. Con esto, es fácil usar AggregationOperation proporcionado por Spring y sus propias etapas de agregación "en bruto" en el mismo lugar.