sql >> Databáze >  >> NoSQL >> MongoDB

V mongodb znáte index prvku pole shodný s operátorem $in?

Řekněme tedy, že v kolekci databáze máme následující:

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

a chceme ve sbírkách hledat následující ID

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

Potom budeme muset vytvořit stav dynamické projekce, abychom mohli promítat správné indexy, takže budeme muset namapovat každé id na odpovídající index

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

Pak to můžeme vložit do našeho agregačního potrubí

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

Spuštěním výše se nyní vypíše každé _id a jeho odpovídající index v rámci coupons_ids pole

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

Můžeme však také přidat další položky do potrubí na konci a odkazovat na $index získat aktuální odpovídající index.



  1. Více skupinových operací pomocí agregačního rámce Mongo

  2. jak spustit příkaz mongo admin z javy

  3. Dávkové vložení MongoDB a NodeJs

  4. Mongo Odlišná agregace