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

Como concatenar resultados de string de vários registros MongoDB em um único resultado no MongoDB?


Use $group para obter uma matriz de todos os documentos e, em seguida, $reduce com $concat para obter uma string:
db.col.aggregate([
    {
        $group: {
            _id: null,
            text: { $push: "$text" }
        }
    },
    {
        $project: {
            text: {
                $reduce: {
                    input: "$text",
                    initialValue: "",
                    in: {
                        $cond: [ { "$eq": [ "$$value", "" ] }, "$$this", { $concat: [ "$$value", " ", "$$this" ] } ]
                    }
                }
            }
        }
    }
])

Após $group você obterá um único documento que contém uma matriz de todos os text valores. Então $reduce "varre" o array e concatena o estado ($$value ) com o item atualmente processado. Para o primeiro estado do item será uma string vazia, então estou usando $cond para evitar ter espaços em branco no início.