"उपलब्ध नहीं" . के बीच एक अलग अंतर है और "कोई क्रियान्वित सहायक विधि नहीं" , और यही यहाँ का वास्तविक मामला है। सिर्फ इसलिए कि $stdDevSamp
या $stdDevPop
ऑपरेटरों, इसका मतलब यह नहीं है कि उनका उपयोग नहीं किया जा सकता है, जब तक कि आप निश्चित रूप से मोंगोडीबी 3.2 इंस्टेंस से कनेक्ट हो रहे हैं।
आपको वास्तव में AggregationOperation
. का समर्थन करने वाली एक कस्टम क्लास की आवश्यकता है इंटरफ़ेस, जो DBObject
. का उपयोग करके निर्माण की अनुमति देगा :
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 CustomAggregationOperation(
new BasicDBObject("$sample", new BasicDBObject("size",100))
),
new CustomAggregationOperation(
new BasicDBObject(
"$group",
new BasicDBObject("_id",null)
.append("ageStdDev",new BasicDBObject("$stdDevSamp","$age"))
)
)
);
और यह दस्तावेज़ीकरण उदाहरण के समतुल्य है :
db.users.aggregate(
[
{ "$sample": { "size": 100 } },
{ "$group": { "_id": null, "ageStdDev": { "$stdDevSamp": "$age" } } }
]
)
AggregationOperation
. के लिए एक इंटरफ़ेस के रूप में वर्ग आसानी से कार्यान्वित सहायकों के साथ घुलमिल जाता है:
Aggregation aggregation = newAggregation(
// Using the match helper for the `$match` stage
match(
Criteria.where("age").gte(20).lte(50)
),
// Mixed in with custom classes for the others
new CustomAggregationOperation(
new BasicDBObject("$sample", new BasicDBObject("size",100))
),
new CustomAggregationOperation(
new BasicDBObject(
"$group",
new BasicDBObject("_id",null)
.append("ageStdDev",new BasicDBObject("$stdDevSamp","$age"))
)
)
);
तो आप अभी भी सुविधाओं का उपयोग कर सकते हैं, भले ही आपके लिए बीएसओएन ऑब्जेक्ट निर्माण को पूरा करने के लिए "सहायक में सहायक" न हो। आप बस निर्माण स्वयं करें।