sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo devolver una matriz de cadena con agregación mongodb

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.