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

Wie benenne ich ein Feld in einem Array mit Datenbankbefehlen um?

  • Der Fehler lautet $map input von akzeptiert Referenzfeld mit $ signieren Sie $version ,
  • schließen Sie das u ein Objekt in Array-Klammer für update with an Aggregationspipeline
  • geben Sie einfach beide Felder title ein und version in $map
  • $unset ist nicht erforderlich, da $map ersetzt alte Daten durch neue Felder in 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
        }
    ]
})

Spielplatz

Zweiter Weg:Für einen dynamischeren Ansatz

  • $mergeObjects innerhalb von $map , um eine manuelle Liste von Schlüssel/Wert-Paaren zu verhindern
  • $unset Stufe zum Entfernen von name Feld von version Array
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
        }
    ]
})

Spielplatz