MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Spring Data Mongodb-Anwendungsdesign und Datenaggregation

Immer wenn Spring Data Mongo eine AggregationOperation fehlt, müssen Sie (um $addFields zu reproduzieren , $redact ...), besteht eine Problemumgehung (einige sagen vielleicht eine schnelle und schmutzige Lösung) darin, die Rohaggregation an Spring zu übergeben, indem Sie direkt die com.mongodb.client-Tools verwenden:

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() wird als List<Document> an die Aggregationspipeline übergeben (Tatsächlich erweitert List<? extends Bson> in Rohform wie oben vorgeschlagen mit Document.parse(), und Sie können natürlich auch new Document() verwenden damit es eher wie ein richtiger OOP-Code aussieht. Ich neige dazu, die Rohform zu verwenden, wenn die Rohaggregation komplex ist oder da viele verschachtelte Komponenten für verschachtelte Dokumente mir zu ausführlich sind, aber das ist Geschmackssache.

AKTUALISIERUNG 2020.

Verwenden Sie diese Problemumgehung stattdessen. Damit ist es einfach, sowohl die von Spring bereitgestellte AggregationOperation als auch Ihre eigenen "rohen" Aggregationsstufen an derselben Stelle zu verwenden.