Setiap kali Spring Data Mongo tidak memiliki AggregationOperation yang Anda butuhkan (untuk mereproduksi $addFields
, $redact
...), solusinya (beberapa orang mungkin mengatakan solusi cepat dan kotor) adalah meneruskan agregasi mentah ke Spring, menggunakan langsung alat 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() diteruskan ke pipeline agregasi sebagai List<Document>
(sebenarnya List<? extends Bson>
dalam bentuk mentah seperti yang disarankan di atas menggunakan Document.parse(), dan tentu saja Anda juga dapat menggunakan new Document()
untuk membuatnya terlihat lebih seperti kode OOP yang tepat. Saya cenderung menggunakan bentuk mentah ketika agregasi mentahnya kompleks atau karena banyak komponen bersarang untuk Dokumen bersarang terlalu bertele-tele bagi saya, tapi itu masalah selera.
PEMBARUAN 2020.
Gunakan solusi ini alih-alih. Dengan ini, mudah untuk menggunakan AggregationOperation yang disediakan oleh Spring dan tahapan agregasi "mentah" Anda sendiri di tempat yang sama.