Да речем, че имаме следното в колекцията от база данни:
> 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
за да получите текущия съответстващ индекс.