sql >> Databasteknik >  >> NoSQL >> MongoDB

$project i $lookup-aggregation

Den största utmaningen är att du vill ha alla fält från huvuddokumentet (eftersom du inte känner till alla) plus endast 2 från listan.

Detta borde göra det:

{
  $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"
  }
}

Det går igenom några steg men får jobbet gjort :). Det skulle ta det aktuella dokumentet och bara de listfält du vill ha. Sedan skulle den ta bort sin lista från det aktuella dokumentet. Sedan skulle det lägga till listan till samma dokument (eftersom den är med de specifika fält vi vill ha). Sedan skulle den lägga till dessa fält i dokumentet och slutligen ersätta roten med det dokumentet.

Se hur det fungerar här .



  1. MongoDB:klass java.lang.Double kan inte castas till klass java.lang.Long

  2. MongoDB $replaceAll

  3. Beställer en resultatuppsättning slumpmässigt i mongo

  4. Hur Redis-listor kan användas för att implementera ett chattsystem?