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 .