Да речем, че имаме следното в колекцията от база данни:
> 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' }
]);
Изпълнението на горното вече ще изведе всеки _id и съответния му индекс в рамките на coupons_ids масив
{ "_id" : "a", "index" : 1 }
{ "_id" : "c", "index" : 0 }
Въпреки това можем да добавим още елементи в конвейера в края и да посочим $index за да получите текущия съответстващ индекс.