MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come rinominare un campo all'interno di un array con i comandi del database?

  • L'errore dice $map input di accetta il campo di riferimento utilizzando $ firmare $version ,
  • allega il u oggetto tra parentesi di matrice per aggiornamento con un pipeline di aggregazione
  • inserisci entrambi i campi title e version in $map
  • $unset non è richiesto perché $map sostituirà i vecchi dati con i nuovi campi 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
        }
    ]
})

Parco giochi

Secondo modo, per un approccio più dinamico

  • $mergeObjects dentro $map , per impedire l'elenco manuale delle coppie chiave-valore
  • $unset fase per rimuovere name campo da version matrice
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
        }
    ]
})

Parco giochi