sql >> Databasteknik >  >> NoSQL >> MongoDB

Spring data mongodb applikationsdesign och dataaggregation

Närhelst Spring Data Mongo saknar en Aggregation Operation behöver du (för att reproducera $addFields , $redact ...), en lösning (vissa kanske säger snabb och smutsig lösning) är att skicka den råa aggregeringen till Spring, direkt med hjälp av com.mongodb.client-verktygen :

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() skickas aggregeringspipelinen som List<Document> (faktiskt List<? extends Bson> i rå form som föreslagits ovan med Document.parse(), och du kan naturligtvis också använda new Document() för att få det att se mer ut som korrekt OOP-kod. Jag brukar använda den råa formen när den råa aggregeringen är komplex eller eftersom många kapslade komponenter för kapslade dokument är för mycket utförliga för mig, men det är en smaksak.

2020 UPPDATERING.

Använd denna lösning istället. Med detta är det enkelt att använda både AggregationOperation från Spring och dina egna "råa" aggregeringssteg på samma plats.




  1. hur får man kombinationer av objekt i ett arrayfält i MongoDB?

  2. ReactiveMongo FindAndModify Clarification

  3. Mongoose - Öka ett värde inuti en array av objekt

  4. Hur optimerar man MongoDB-frågan med både $gt och $lte?