O
.aggregate() método sempre retorna Objects não importa o que você faça e isso não pode mudar. Para o seu propósito, provavelmente é melhor usar
.distinct() em vez disso, que apenas retorna uma matriz dos valores distintos:db.users.distinct("emails.address");
Qual é exatamente a saída desejada:
["example@sqldat.com","example@sqldat.com","example@sqldat.com"]
Se você realmente deseja usar
.aggregate() então a transformação apenas para os valores precisa acontecer "fora" da expressão no pós-processamento. E você também deve usar $unwind ao lidar com matrizes como esta. Você pode fazer isso com JavaScript
.map() por exemplo:db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
O que dá a mesma saída, mas o
.map() faz a transformação do lado do cliente em vez de no servidor.