MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Dans mongodb, connaissez-vous l'index de l'élément de tableau correspondant à l'opérateur $in ?

Supposons que nous ayons les éléments suivants dans la collection de la base de données :

> db.couponmodel.find()
{ "_id" : "a" }
{ "_id" : "b" }
{ "_id" : "c" }
{ "_id" : "d" }

et nous souhaitons rechercher les identifiants suivants dans les collections

var coupons_ids = ["c", "a" ,"z"];

Nous devrons ensuite créer un état de projection dynamique afin de pouvoir projeter les index corrects, nous devrons donc mapper chaque identifiant à son index correspondant

var conditions = coupons_ids.map(function(value, index){
    return { $cond: { if: { $eq: ['$_id', value] }, then: index, else: -1 } };
});

Ensuite, nous pouvons ensuite l'injecter dans notre pipeline d'agrégation

db.couponmodel.aggregate([
    { $match : { '_id' : { $in : coupons_ids } } },
    { $project: { indexes : conditions } },
    { $project: {
        index : {
            $filter: { 
                input: "$indexes", as: "indexes", cond: { $ne: [ "$$indexes", -1 ] }
                }
            }
        } 
    },
    { $unwind: '$index' }
]);

L'exécution de ce qui précède produira désormais chaque _id et son index correspondant dans le coupons_ids tableau

{ "_id" : "a", "index" : 1 }
{ "_id" : "c", "index" : 0 }

Cependant, nous pouvons également ajouter d'autres éléments au pipeline à la fin et référencer $index pour obtenir l'index correspondant actuel.