MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Sotto-documento aggregato/progetto come documento di primo livello in mongo

Quando sono presenti molti, molti campi nel documento secondario e occasionalmente viene aggiornato con nuovi campi, la proiezione non è un'opzione praticabile. Fortunatamente, dalla versione 3.4, MongoDB ha un nuovo operatore chiamato $replaceRoot .

Tutto quello che devi fare è aggiungere una nuova fase alla fine della tua pipeline.

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

Questo ti darebbe l'output desiderato.

Si noti che in caso di aggregazione (soprattutto dopo un $group fase) il documento "comando" potrebbe essere un array e potrebbe contenere più documenti. In questo caso è necessario $unwind prima l'array per poter utilizzare $replaceRoot .