sql >> Base de Datos >  >> NoSQL >> MongoDB

Subdocumento agregado/proyecto como documento de nivel superior en mongo

Cuando tiene muchos, muchos campos en el subdocumento y ocasionalmente se actualiza con nuevos campos, entonces la proyección no es una opción viable. Afortunadamente, desde 3.4, MongoDB tiene un nuevo operador llamado $replaceRoot .

Todo lo que tiene que hacer es agregar una nueva etapa al final de su embudo.

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

Esto le daría el resultado deseado.

Tenga en cuenta que en caso de agregación (especialmente después de un $group etapa) el documento de 'comando' podría ser una matriz y podría contener varios documentos. En este caso, debe $unwind la matriz primero para poder usar $replaceRoot .