MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

W mongodb znasz indeks elementu tablicy dopasowany do operatora $in?

Powiedzmy, że w kolekcji bazy danych mamy:

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

i chcemy wyszukać następujące identyfikatory w kolekcjach

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

Następnie będziemy musieli zbudować dynamiczny stan projekcji, aby móc rzutować prawidłowe indeksy, więc będziemy musieli zmapować każdy identyfikator do odpowiadającego mu indeksu

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

Następnie możemy wstrzyknąć to do naszego potoku agregacji

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

Uruchomienie powyższego spowoduje teraz wyświetlenie każdego _id i odpowiadającego mu indeksu w ramach coupons_ids tablica

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

Jednak możemy również dodać więcej elementów do potoku na końcu i odwołać się do $index aby uzyskać aktualnie dopasowany indeks.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak utworzyć schemat Mongoose z tablicą identyfikatorów obiektów?

  2. Metody find() i findOne() w MongoDB pokazujące różne wyniki

  3. Błąd:wymagane dane i argumenty soli

  4. Python Mogo ImportError:nie można zaimportować nazwy Connection

  5. $pierwszy w mongodb