MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

В mongodb знаете индекса на елемент от масив, съвпадащ с $in оператор?

Да речем, че имаме следното в колекцията от база данни:

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

и искаме да търсим следните идентификатори в колекциите

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

След това ще трябва да изградим състояние на динамична проекция, за да можем да проектираме правилните индекси, така че ще трябва да съпоставим всеки идентификатор към съответния му индекс

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

След това можем да инжектираме това в нашия тръбопровод за агрегиране

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

Изпълнението на горното вече ще изведе всеки _id и съответния му индекс в рамките на coupons_ids масив

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

Въпреки това можем да добавим още елементи в конвейера в края и да посочим $index за да получите текущия съответстващ индекс.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да използвам променлива mongoose заявка?

  2. Как да проектирам дали полето съществува

  3. Как да проверя дали даден документ е вмъкнат или актуализиран при използване на findOneAndUpdate?

  4. MongoDB $ log10

  5. Как идентификаторът на машината/името на хост се нанася/отменя на 3 байта в идентификатора на обект?