sql >> Database >  >> NoSQL >> MongoDB

Hoe hernoem je een veld in een array met databasecommando's?

  • De fout zegt $map 's input accepteert referentieveld met behulp van $ teken $version ,
  • sluit de u in object tussen array-haakje voor update met een aggregatiepijplijn
  • plaats gewoon beide velden title en version in $map
  • $unset is niet vereist omdat $map zal oude gegevens vervangen door nieuwe velden 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
        }
    ]
})

Speeltuin

Tweede manier, voor een meer dynamische benadering

  • $mergeObjects binnen $map , om handmatige lijst van sleutel-waardenpaar te voorkomen
  • $unset fase om name te verwijderen veld van version reeks
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
        }
    ]
})

Speeltuin




  1. Een ingesloten document bijwerken in mongoengine

  2. mongoengine - Negeer extra velden voor schemavalidatie

  3. Meteor:Meteor.call() van binnenuit observeren callback wordt niet uitgevoerd

  4. Inleiding tot Redis-gegevensstructuren:bitmaps