sql >> Databasteknik >  >> NoSQL >> MongoDB

Aggregerat/projekt underdokument som toppnivådokument i mongo

När du har många, många fält i underdokumentet och ibland uppdateras det med nya fält, är projektion inte ett gångbart alternativ. Lyckligtvis, sedan 3.4, har MongoDB en ny operatör som heter $replaceRoot .

Allt du behöver göra är att lägga till ett nytt steg i slutet av din pipeline.

db.getCollection('sample').aggregate([
    {
        $replaceRoot: {newRoot: "$command"}
    },
    {
        $project: {score: 0 } //exclude score field
    }
])

Detta skulle ge dig önskad utdata.

Observera att vid aggregering (särskilt efter en $grupp steg) kan "kommando"-dokumentet vara en array och kan innehålla flera dokument. I det här fallet måste du $unwind arrayen först för att kunna använda $replaceRoot .



  1. MongoDB kapslade dokumentsökning

  2. Mongoose:atomic FindOne-Or-Insert(), uppdatera inte befintlig instans om den hittas

  3. Hur förhindrar man MongoDB från att returnera objekt-ID när man hittar ett dokument?

  4. Hur man gör en komplex fråga MongoDB med Powershell