Bất cứ khi nào Spring Data Mongo thiếu AggregationOperation bạn cần (để tái tạo $addFields
, $redact
...), một giải pháp thay thế (một số người có thể nói là giải pháp nhanh chóng và bẩn thỉu) là chuyển tập hợp thô cho Spring, sử dụng trực tiếp các công cụ 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 () được chuyển qua đường ống tổng hợp dưới dạng List<Document>
(thực tế là List<? extends Bson>
ở dạng thô như được đề xuất ở trên bằng cách sử dụng Document.parse () và tất nhiên bạn cũng có thể sử dụng new Document()
để làm cho nó giống mã OOP thích hợp hơn. Tôi có xu hướng sử dụng biểu mẫu thô khi tổng hợp thô phức tạp hoặc nhiều thành phần lồng nhau cho Tài liệu lồng nhau quá dài đối với tôi, nhưng đó là vấn đề của sở thích.
CẬP NHẬT NĂM 2020.
Sử dụng cách giải quyết này thay vì. Với điều này, thật dễ dàng để sử dụng cả AggregationOperation do Spring cung cấp và các giai đoạn tổng hợp "thô" của riêng bạn ở cùng một nơi.