Cuando tiene muchos, muchos campos en el subdocumento y ocasionalmente se actualiza con nuevos campos, entonces la proyección no es una opción viable. Afortunadamente, desde 3.4, MongoDB tiene un nuevo operador llamado $replaceRoot .
Todo lo que tiene que hacer es agregar una nueva etapa al final de su embudo.
db.getCollection('sample').aggregate([
{
$replaceRoot: {newRoot: "$command"}
},
{
$project: {score: 0 } //exclude score field
}
])
Esto le daría el resultado deseado.
Tenga en cuenta que en caso de agregación (especialmente después de un $group etapa) el documento de 'comando' podría ser una matriz y podría contener varios documentos. En este caso, debe $unwind la matriz primero para poder usar $replaceRoot .