- Felet säger
$map
sinput
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
ochversion
i$map
$unset
krävs inte eftersom$map
kommer att ersätta gamla data med nya fält iin
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
}
]
})
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 bortname
fält frånversion
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
}
]
})