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:
["[email protected]","[email protected]","[email protected]"]
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.