sql >> Database >  >> NoSQL >> MongoDB

Geaggregeerd/project subdocument als document op het hoogste niveau in mongo

Als u veel, veel velden in het subdocument hebt en het af en toe wordt bijgewerkt met nieuwe velden, dan is projectie geen haalbare optie. Gelukkig heeft MongoDB sinds 3.4 een nieuwe operator genaamd $replaceRoot .

Het enige wat u hoeft te doen is een nieuwe fase aan het einde van uw pijplijn toe te voegen.

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

Dit zou je de gewenste output geven.

Merk op dat in het geval van aggregatie (vooral na een $group stage) kan het 'opdracht'-document een array zijn en meerdere documenten bevatten. In dit geval moet u $unwind de array eerst om $replaceRoot .



  1. Hoe kan ik niet zoals op laravel mongodb gebruiken?

  2. Mongoose + lodash breiden kopieerarray van object verkeerd uit

  3. MongoDB sorteert documenten op geneste gegevens

  4. MongoDB C# Query Array van objecten die een eigenschapswaarde bevatten