MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come restituire un array di stringhe con l'aggregazione mongodb

Il .aggregate() il metodo restituisce sempre Objects non importa quello che fai e questo non può cambiare.

Per il tuo scopo probabilmente è meglio usare .distinct() invece, che restituisce semplicemente un array di valori distinti:

db.users.distinct("emails.address");

Qual è esattamente l'output desiderato:

["[email protected]","[email protected]","[email protected]"]

Se vuoi davvero usare .aggregate() quindi la trasformazione ai soli valori deve avvenire "al di fuori" dell'espressione in post-elaborazione. E dovresti anche usare $unwind quando si ha a che fare con array come questo.

Puoi farlo con JavaScript .map() ad esempio:

db.users.aggregate([
    { "$unwind": "$emails" },
    { "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })

Che dà lo stesso output, ma il .map() esegue la trasformazione lato client anziché sul server.