अपडेट करें:
स्प्रिंग डेटा के v2.0 से शुरू करके आप यह कर सकते हैं:
SampleOperation matchStage = Aggregation.sample(5);
Aggregation aggregation = Aggregation.newAggregation(sampleStage);
AggregationResults<OutType> output = mongoTemplate.aggregate(aggregation, "collectionName", OutType.class);
मूल उत्तर:
स्प्रिंग-मोंगो जैसी अमूर्त परतें हमेशा सर्वर द्वारा जारी सुविधाओं से पीछे रहने वाली हैं। इसलिए आप स्वयं पाइपलाइन चरण के लिए बीएसओएन दस्तावेज़ संरचना का निर्माण करने के लिए सर्वोत्तम हैं।
एक कस्टम वर्ग में लागू करें:
public class CustomAggregationOperation implements AggregationOperation {
private DBObject operation;
public CustomAggregationOperation (DBObject operation) {
this.operation = operation;
}
@Override
public DBObject toDBObject(AggregationOperationContext context) {
return context.getMappedObject(operation);
}
}
और फिर अपने कोड में उपयोग करें:
Aggregation aggregation = newAggregation(
new CutomAggregationOperation(
new BasicDBObject(
"$sample",
new BasicDBObject( "size", 15 )
)
)
);
चूंकि यह AggregationOperation
को लागू करता है यह मौजूदा पाइपलाइन संचालन सहायक विधियों के साथ अच्छी तरह से काम करता है। यानी:
Aggregation aggregation = newAggregation(
// custom pipeline stage
new CutomAggregationOperation(
new BasicDBObject(
"$sample",
new BasicDBObject( "size", 15 )
)
),
// Standard match pipeline stage
match(
Criteria.where("myDate")
.gte(new Date(new Long("949384052490")))
.lte(new Date(new Long("1448257684431")))
)
);
तो फिर, दिन के अंत में सब कुछ सिर्फ एक बीएसओएन ऑब्जेक्ट है। यह सिर्फ एक इंटरफ़ेस रैपर होने की बात है ताकि स्प्रिंग-मोंगो में क्लास के तरीके परिणाम की व्याख्या करें और आपके परिभाषित बीएसओएन ऑब्जेक्ट को सही ढंग से प्राप्त करें।