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

Sous-document agrégé/de projet en tant que document de niveau supérieur dans mongo

Lorsque vous avez de très nombreux champs dans le sous-document et qu'il est parfois mis à jour avec de nouveaux champs, la projection n'est pas une option viable. Heureusement, depuis la version 3.4, MongoDB a un nouvel opérateur appelé $replaceRoot .

Tout ce que vous avez à faire est d'ajouter une nouvelle étape à la fin de votre pipeline.

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

Cela vous donnerait la sortie souhaitée.

Notez qu'en cas d'agrégation (surtout après un $group stage) le document 'command' peut être un tableau et peut contenir plusieurs documents. Dans ce cas, vous devez $unwind le tableau en premier pour pouvoir utiliser $replaceRoot .