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

zapytaj o dokumenty, które zależą od wartości innych dokumentów w mongodb

Wypróbuj nieskorelowane podzapytanie z 3.6 dla twojego przypadku użycia.

Coś jak

User.aggregate(
 [{$lookup:{
   from: "users",
   pipeline:[
    {$match: {_id:mongoose.Types.ObjectId(id)}},
    {$project: {_id:0,blockedIds:1}}
   ],
   as: "noncr"
 }},
 {$match:{
   $expr:{
     $not:[
      {$in:[
        $_id,
        {$arrayElemAt:["$noncr.blockedIds",0]}
      ]}
    ]
  }
}},
{$project:{noncr:0}}]
)

$lookup pobrać „blockedIds” dla identyfikatora wejściowego, po którym następuje $match aby filtrować dokumenty, w których "_id" nie znajduje się na liście zablokowanych identyfikatorów.

$expr pozwala na użycie operatorów porównania agregacji na etapie $match.

$arrayElemAt aby pobrać pierwszy element z tablicy $lookup.

$in aby porównać _id z zablokowanymi identyfikatorami.

$project z wykluczeniem usunięcia pola „noncr” z końcowej odpowiedzi.

Pamiętaj, że podczas testowania zapytania użyj nazwy kolekcji, a nie nazwy modelu lub schematu w atrybucie „from” etapu wyszukiwania.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Jak wyłączyć rejestrowanie ostrzeżenia:ClientCursor::staticYield nie może odblokować b/c blokady rekurencyjnej?

  2. MongoDB 2.1 Aggregate Framework Sum of Array Elements pasujących do nazwy

  3. Zmień klucz dokumentu mongodb agregat

  4. Używanie $slice z $regex razem w tablicy subDocument w mongodb

  5. Atlas Mongodb + node.js działają lokalnie, ale przestają działać po wypchnięciu do Heroku