sql >> Databáze >  >> NoSQL >> MongoDB

dotaz na dokumenty, které závisí na hodnotách jiných dokumentů v mongodb

Zkuste nekorelované dílčí dotaz z 3.6 pro váš případ použití.

Něco jako

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 vytáhněte "blockedIds" pro vstupní ID následované $match pro filtrování dokumentů, kde "_id" není v seznamu blockedIds.

$expr umožňuje použití operátorů porovnání agregace ve fázi $match.

$arrayElemAt k načtení prvního prvku z pole $lookup.

$in pro porovnání _id s blockedIds.

$project s vyloučením k odstranění pole „noncr“ z konečné odpovědi.

Vezměte prosím na vědomí, že při testovacím dotazu použijte název kolekce, nikoli název modelu nebo schématu v atributu „from“ ve fázi vyhledávání.



  1. Importujte data na MongoDB pomocí Docker-Compose

  2. MongoDB - Aktualizace objektu ve vnořeném poli

  3. Vložte nový objekt do pole pole vnořeného dokumentu v mongoose

  4. MongoDB Capped Collection neodstraňuje dokumenty