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

Comment renommer un champ dans un tableau avec des commandes de base de données ?

  • L'erreur indique $map l'input de accepte le champ de référence en utilisant $ signer $version ,
  • joindre le u objet dans le support de tableau pour mise à jour avec un pipeline d'agrégation
  • il suffit de mettre les deux champs title et version dans $map
  • $unset n'est pas nécessaire car $map remplacera les anciennes données par de nouveaux champs dans 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
        }
    ]
})

Aire de jeux

Deuxième voie, pour une approche plus dynamique

  • $mergeObjects à l'intérieur de $map , pour empêcher la liste manuelle des paires clé-valeur
  • $unset étape pour supprimer name champ de version tableau
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
        }
    ]
})

Aire de jeux