Consulta de agregación de MongoDB: renombrar campos devueltos desde dentro de documentos incrustados

Actualmente estoy usando el operador agregado para devolver documentos que tienen una matriz de documentos (sub) incrustados. Quiero cambiar el nombre del campo para la matriz y también cambiar el nombre de los campos en los documentos incrustados de la matriz.

Como ejemplo, para la proyección quiero cambiar el nombre de la matriz de "amigos" a "amigos" y también quiero cambiar el nombre de los campos en el documento incrustado de "nombre" a "nickName". ¿Puedo hacer esto dentro de una operación agregada y, de ser así, cómo?

Aquí hay un ejemplo del documento fuente:

[
    {
        _id: ObjectID,
        name: 'Matthew',
        friends: [
            {name: 'Slim', age: '32'},
            {name: 'buba', age: '36'}
        ]
    }
]

Así es como deberían verse los resultados:

[
    {
        _id: ObjectID,
        name: 'Matthew',
        buddies: [
            {nickName: 'Chris', age: '32'},
            {nickName: 'Jim', age: '36'}
        ]
    }
]

Gracias por la ayuda por adelantado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta