Jeśli masz wiele, wiele pól w poddokumencie i od czasu do czasu jest on aktualizowany o nowe pola, wówczas projekcja nie jest realną opcją. Na szczęście od wersji 3.4 MongoDB ma nowego operatora o nazwie $replaceRoot .
Wszystko, co musisz zrobić, to dodać nowy etap na końcu potoku.
db.getCollection('sample').aggregate([
{
$replaceRoot: {newRoot: "$command"}
},
{
$project: {score: 0 } //exclude score field
}
])
Dałoby to pożądany wynik.
Zauważ, że w przypadku agregacji (zwłaszcza po $group etapie) dokument „polecenie” może być tablicą i zawierać wiele dokumentów. W takim przypadku musisz $unwind tablica jako pierwsza, aby móc użyć $replaceRoot .