Så lad os sige, at vi har følgende i databasesamlingen:
> db.couponmodel.find()
{ "_id" : "a" }
{ "_id" : "b" }
{ "_id" : "c" }
{ "_id" : "d" }
og vi ønsker at søge efter følgende id'er i samlingerne
var coupons_ids = ["c", "a" ,"z"];
Vi bliver så nødt til at opbygge en dynamisk projektionstilstand, så vi kan projicere de korrekte indekser, så vi bliver nødt til at kortlægge hvert id til dets tilsvarende indeks
var conditions = coupons_ids.map(function(value, index){
return { $cond: { if: { $eq: ['$_id', value] }, then: index, else: -1 } };
});
Så kan vi så injicere dette i vores aggregeringspipeline
db.couponmodel.aggregate([
{ $match : { '_id' : { $in : coupons_ids } } },
{ $project: { indexes : conditions } },
{ $project: {
index : {
$filter: {
input: "$indexes", as: "indexes", cond: { $ne: [ "$$indexes", -1 ] }
}
}
}
},
{ $unwind: '$index' }
]);
Hvis du kører ovenstående, udsendes nu hvert _id og dets tilsvarende indeks inden for coupons_ids
array
{ "_id" : "a", "index" : 1 }
{ "_id" : "c", "index" : 0 }
Men vi kan også tilføje flere elementer til pipelinen i slutningen og henvise til $index
for at få det aktuelle matchede indeks.