जब भी स्प्रिंग डेटा मोंगो में एक एग्रीगेशन ऑपरेशन की कमी होती है ($addFields
को पुन:पेश करने के लिए) , $redact
...), एक वर्कअराउंड (कुछ लोग त्वरित और गंदा समाधान कह सकते हैं) सीधे 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() को List<Document>
. के रूप में एग्रीगेशन पाइपलाइन पास किया गया है (वास्तव में List<? extends Bson>
कच्चे रूप में जैसा कि ऊपर Document.parse() का उपयोग करके सुझाया गया है, और आप निश्चित रूप से new Document()
का भी उपयोग कर सकते हैं इसे उचित ओओपी कोड की तरह दिखने के लिए। मैं कच्चे रूप का उपयोग तब करता हूं जब कच्चा एकत्रीकरण जटिल होता है या नेस्टेड दस्तावेज़ के लिए कई नेस्टेड घटक मेरे लिए बहुत अधिक क्रियात्मक होते हैं, लेकिन यह स्वाद का मामला है।
2020 अपडेट करें।
इसका उपयोग करें समाधान बजाय। इसके साथ, स्प्रिंग द्वारा प्रदान किए गए एग्रीगेशन ऑपरेशन और एक ही स्थान पर आपके अपने "रॉ" एग्रीगेशन चरणों का उपयोग करना आसान है।