तो मान लें कि हमारे पास डेटाबेस संग्रह में निम्नलिखित हैं:
> db.couponmodel.find()
{ "_id" : "a" }
{ "_id" : "b" }
{ "_id" : "c" }
{ "_id" : "d" }
और हम संग्रहों में निम्नलिखित आईडी खोजना चाहते हैं
var coupons_ids = ["c", "a" ,"z"];
फिर हमें एक डायनामिक प्रोजेक्शन स्टेट बनाना होगा ताकि हम सही इंडेक्स को प्रोजेक्ट कर सकें, इसलिए हमें प्रत्येक आईडी को उसके संबंधित इंडेक्स में मैप करना होगा
var conditions = coupons_ids.map(function(value, index){
return { $cond: { if: { $eq: ['$_id', value] }, then: index, else: -1 } };
});
फिर हम इसे अपनी एग्रीगेशन पाइपलाइन में इंजेक्ट कर सकते हैं
db.couponmodel.aggregate([
{ $match : { '_id' : { $in : coupons_ids } } },
{ $project: { indexes : conditions } },
{ $project: {
index : {
$filter: {
input: "$indexes", as: "indexes", cond: { $ne: [ "$$indexes", -1 ] }
}
}
}
},
{ $unwind: '$index' }
]);
उपरोक्त को चलाने से अब coupons_ids
के भीतर प्रत्येक _id और उसकी संगत अनुक्रमणिका आउटपुट होगी सरणी
{ "_id" : "a", "index" : 1 }
{ "_id" : "c", "index" : 0 }
हालाँकि हम अंत में पाइपलाइन में और आइटम भी जोड़ सकते हैं और संदर्भ $index
वर्तमान मिलान सूचकांक प्राप्त करने के लिए।