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

¿Cómo cambiar el nombre de un campo dentro de una matriz con comandos de base de datos?

  • El error dice $map input de acepta el campo de referencia usando $ firmar $version ,
  • encierra la u objeto en paréntesis de matriz para actualizar con un tubería de agregación
  • simplemente ponga ambos campos title y version en $map
  • $unset no es necesario porque $map reemplazará los datos antiguos con nuevos campos en in
db.runCommand({
    update: 'apps',
    updates: [
        {
            q: { "versions.name": { $exists: true } },
            u: [{
                $set: {
                    versions: {
                        $map: {
                            input: "$versions",
                            in: {
                                "title": "$$this.name",
                                "version": "$$this.version"
                            }
                        }
                    }
                }
            }],
            multi: true
        }
    ]
})

Patio de juegos

Segunda vía, para un enfoque más dinámico

  • $mergeObjects dentro de $map , para evitar la lista manual de pares clave-valor
  • $unset etapa para eliminar name campo de version matriz
db.runCommand({
    update: 'apps',
    updates: [
        {
            q: { "versions.name": { $exists: true } },
            u: [
              {
                $set: {
                    versions: {
                        $map: {
                            input: "$versions",
                            in: {
                                $mergeObjects: [
                                    "$$this",
                                    { "title": "$$this.name" }
                                ]
                            }
                        }
                    }
                }
              },
              { $unset: "versions.name" }
            ],
            multi: true
        }
    ]
})

Patio de juegos