sql >> Database >  >> NoSQL >> MongoDB

Spring data mongodb applicatie-ontwerp en data-aggregatie

Wanneer Spring Data Mongo geen AggregationOperation heeft, moet u (om $addFields te reproduceren , $redact ...), is een tijdelijke oplossing (sommigen zeggen een snelle en vuile oplossing) om de onbewerkte aggregatie door te geven aan Spring, rechtstreeks met behulp van de com.mongodb.client-tools:

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() krijgt de aggregatiepijplijn als List<Document> (in feite List<? extends Bson> in onbewerkte vorm zoals hierboven voorgesteld met behulp van Document.parse(), en u kunt natuurlijk ook new Document() gebruiken om het meer op de juiste OOP-code te laten lijken. Ik heb de neiging om de onbewerkte vorm te gebruiken wanneer de onbewerkte aggregatie complex is of als veel geneste componenten voor genest document te uitgebreid voor mij zijn, maar dat is een kwestie van smaak.

2020-UPDATE.

Gebruik deze oplossing in plaats van. Hiermee is het gemakkelijk om zowel AggregationOperation van Spring als uw eigen "onbewerkte" aggregatiestadia op dezelfde plaats te gebruiken.




  1. mongodb aggregatiequery retourneert geen juiste som bij gebruik van $sum

  2. mongodb-query geneste structuur

  3. applicatie time-out bij verbinding met MongoLab vanuit Heroku

  4. Sidekiq verwerkt wachtrij niet