sql >> Database >  >> NoSQL >> MongoDB

$project in $lookup-aggregatie

De belangrijkste uitdaging is dat u alle velden uit het hoofddocument . wilt hebben (omdat je ze niet allemaal kent) plus slechts 2 van de lijst.

Dit zou het moeten doen:

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

Het doorloopt een paar fasen, maar klaart de klus :). Het zou het huidige document gebruiken en alleen de lijstvelden die u wilt. Dan zou het zijn lijst uit het huidige document verwijderen. Dan zou het aan datzelfde document de lijst toevoegen (aangezien die met de specifieke velden is die we willen). Dan zou het die velden aan het document toevoegen en ten slotte zou het de root vervangen door dat document.

Zie het hier werkend .



  1. MongoDB geaggregeerd resultaat met twee verschillende sleutels

  2. Moet ik admin zijn om een ​​nieuwe gebruiker in MongoDB aan te maken?

  3. Mongo DB vindt alle records met de hoogste waarde, afhankelijk van een sleutelveld

  4. Moet ik gebruikersinvoer opschonen voordat ik deze in MongoDB invoeg (MongoDB + Node js-combinatie)