sql >> Database teknologi >  >> NoSQL >> MongoDB

I mongodb kender indekset for array-elementet matchet med $in-operatoren?

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.



  1. sorter array i forespørgsel og projekter alle felter

  2. Kan ikke oprette forbindelse til docker mongo

  3. Tabte nanosekunder fra MongoDB ISODate Object

  4. CouchDB/Couchbase/MongoDB transaktionsemulering?