El .aggregate()
el método siempre devuelve Objects
no importa lo que hagas y eso no puede cambiar.
Para su propósito, probablemente sea mejor que use .distinct()
en cambio, que simplemente devuelve una matriz de valores distintos:
db.users.distinct("emails.address");
Cuál es exactamente el resultado deseado:
["[email protected]","[email protected]","[email protected]"]
Si realmente quieres usar .aggregate()
luego, la transformación a solo los valores debe ocurrir "fuera" de la expresión en el procesamiento posterior. Y también deberías usar $unwind
cuando se trata de arreglos como este.
Puede hacer esto con JavaScript .map()
por ejemplo:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Lo que da el mismo resultado, pero .map()
hace la transformación del lado del cliente en lugar de en el servidor.