MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment concaténer les résultats de chaîne de plusieurs enregistrements MongoDB en un seul résultat dans MongoDB ?

Utilisez $group pour obtenir un tableau de tous les documents, puis $reduce avec $concat pour obtenir une chaîne :

db.col.aggregate([
    {
        $group: {
            _id: null,
            text: { $push: "$text" }
        }
    },
    {
        $project: {
            text: {
                $reduce: {
                    input: "$text",
                    initialValue: "",
                    in: {
                        $cond: [ { "$eq": [ "$$value", "" ] }, "$$this", { $concat: [ "$$value", " ", "$$this" ] } ]
                    }
                }
            }
        }
    }
])

Après $group vous obtiendrez un document unique contenant un tableau de tous les text valeurs. Alors $reduce "scanne" le tableau et concatène l'état ($$value ) avec l'élément en cours de traitement. Pour le premier élément, l'état sera une chaîne vide, j'utilise donc $cond pour éviter d'avoir des espaces au début.