MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie verkettet man String-Ergebnisse aus mehreren MongoDB-Datensätzen zu einem einzigen Ergebnis in MongoDB?

Verwenden Sie $group um ein Array aus allen Dokumenten zu erhalten und dann $reduce mit $concat um eine Zeichenfolge zu erhalten:

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

Nach $group Sie erhalten ein einzelnes Dokument, das ein Array aller text enthält Werte. Dann $reduce "scannt" das Array und verkettet den Zustand ($$value ) mit aktuell bearbeitetem Artikel. Da der erste Elementstatus eine leere Zeichenfolge ist, verwende ich $cond um Leerzeichen am Anfang zu vermeiden.