- 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 undversion
in$map
$unset
ist nicht erforderlich, da$map
ersetzt alte Daten durch neue Felder inin
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
}
]
})
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 vonname
Feld vonversion
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
}
]
})