sql >> Databasteknik >  >> NoSQL >> MongoDB

I mongodb vet index för arrayelement matchat med $in-operatorn?

Så säg att vi har följande i databassamlingen:

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

och vi vill söka efter följande id i samlingarna

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

Vi måste sedan bygga upp ett dynamiskt projektionstillstånd så att vi kan projicera de korrekta indexen, så vi måste mappa varje id till dess motsvarande index

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

Sedan kan vi injicera detta i vår 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' }
]);

Om du kör ovanstående kommer nu varje _id att matas ut och dess motsvarande index inom coupons_ids array

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

Men vi kan också lägga till fler objekt i pipelinen i slutet och referera till $index för att få det aktuella matchade indexet.



  1. Lista det sista meddelandet i varje konversation, som involverar en användare, i MongoDB

  2. Nodejs / Express - Att starta min app:express.createServer() är utfasad

  3. Mongo docker-inställning trasig efter omstart (unifi-kontroller på raspberry pi)

  4. Hur säkert är MongoDB:s säkra läge på skär?