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

Aggregat-/Projektunterdokument als Top-Level-Dokument in Mongo

Wenn Sie viele, viele Felder im untergeordneten Dokument haben und es gelegentlich mit neuen Feldern aktualisiert wird, ist die Projektion keine praktikable Option. Glücklicherweise hat MongoDB seit 3.4 einen neuen Operator namens $replaceRoot .

Alles, was Sie tun müssen, ist eine neue Phase am Ende Ihrer Pipeline hinzuzufügen.

db.getCollection('sample').aggregate([
    {
        $replaceRoot: {newRoot: "$command"}
    },
    {
        $project: {score: 0 } //exclude score field
    }
])

Dies würde Ihnen die gewünschte Ausgabe geben.

Beachten Sie, dass im Falle einer Aggregation (insbesondere nach einer $group Stufe) könnte das „Befehls“-Dokument ein Array sein und mehrere Dokumente enthalten. In diesem Fall müssen Sie $unwind das Array zuerst, um $replaceRoot .