sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur byter man namn på ett fält i en array med databaskommandon?

  • Felet säger $map s input accepterar referensfält med $ tecken $version ,
  • bifoga u objekt inom arrayparentes för uppdatering med en aggregeringspipeline
  • lägg bara in båda fälten title och version i $map
  • $unset krävs inte eftersom $map kommer att ersätta gamla data med nya fält i 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
        }
    ]
})

Lekplats

Andra sättet, För mer dynamiskt tillvägagångssätt

  • $mergeObjects inuti $map , för att förhindra manuell lista med nyckel-värdepar
  • $unset steg för att ta bort name fält från 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
        }
    ]
})

Lekplats




  1. Fördel med ett unikt index i MongoDB

  2. Hur man lagrar en beställd uppsättning dokument i MongoDB utan att använda en begränsad samling

  3. fortsätt i cursor.forEach()

  4. Mongodb fel misslyckades med att använda textindex för att tillfredsställa $text-frågan