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

$project v agregaci $lookup

Hlavním problémem je, že chcete všechna pole z hlavního dokumentu (protože neznáte všechny) plus pouze 2 ze seznamu.

Mělo by to stačit:

{
  $project: {
    "_id": 0,
    "document": "$$CURRENT",
    "list._id": "$$CURRENT.list._id",
    "list.name": "$$CURRENT.list.name"
  }
}, {
  $project: {
    "document.list": 0
  }
}, {
  $addFields: {
    "document.list._id": "$$CURRENT.list._id",
    "document.list.name": "$$CURRENT.list.name"
  }
}, {
  $replaceRoot: {
    newRoot: "$document"
  }
}

Prochází několika fázemi, ale svou práci zvládne :). Chtělo by to aktuální dokument a pouze požadovaná pole seznamu. Poté by z aktuálního dokumentu odstranil jeho seznam. Pak by do stejného dokumentu přidal seznam (protože ten je s konkrétními poli, která chceme). Pak by tato pole přidal do dokumentu a nakonec by nahradil kořen tímto dokumentem.

Podívejte se, jak funguje .



  1. Nelze najít modul 'socket.io/node_modules/redis'

  2. Správa AWS:Jak ušetřit 30 % na nákladech na hostování MongoDB

  3. Získání odlišné agregace pole pole napříč indexy

  4. Připojovací řetězec v MongoDB (s příklady)