sql >> Database >  >> NoSQL >> MongoDB

Weet u in mongodb de index van het array-element dat overeenkomt met de $in-operator?

Stel dat we het volgende in de databaseverzameling hebben:

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

en we willen zoeken naar de volgende id's in de collecties

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

We zullen dan een dynamische projectiestatus moeten opbouwen zodat we de juiste indexen kunnen projecteren, dus we zullen elke id moeten toewijzen aan de bijbehorende index

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

Dan kunnen we dit vervolgens in onze aggregatiepijplijn injecteren

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

Als u het bovenstaande uitvoert, wordt nu elke _id uitgevoerd en de bijbehorende index binnen de coupons_ids reeks

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

We kunnen aan het einde echter ook meer items aan de pijplijn toevoegen en verwijzen naar $index om de huidige overeenkomende index te krijgen.



  1. Ongedaan maken Ontspan in totaal in mongodb

  2. Mongo-klassen worden niet automatisch geladen in de Yii-consoletoepassing

  3. mongodb query-update selecteer geneste velden

  4. Mongoose, Selecteer een specifiek veld met find