MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como retornar array de string com agregação mongodb


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.