sql >> Databáze >  >> NoSQL >> MongoDB

Jak přejmenovat pole uvnitř pole pomocí databázových příkazů?

  • Chyba říká $map input uživatele přijímá referenční pole pomocí $ podepsat $version ,
  • uzavřete u objekt v závorce pole pro aktualizaci pomocí agregační kanál
  • stačí zadat obě pole title a version v $map
  • $unset není vyžadováno, protože $map nahradí stará data novými poli v 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
        }
    ]
})

Hřiště

Druhý způsob, pro dynamičtější přístup

  • $mergeObjects uvnitř $map , abyste zabránili ručnímu vypisování párů klíč–hodnota
  • $unset fázi k odstranění name pole z version pole
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
        }
    ]
})

Hřiště




  1. Výkon struktury kolekce MongoDB

  2. sumace dvou sloupců v agregační metodě

  3. Argument musí být řetězec v nodejs

  4. Pruh:Musí poskytnout zdroj nebo zákazníka