- O erro diz
$map
'sinput
aceita campo de referência usando$
assinar$version
, - coloque o
u
objeto no colchete de matriz para atualizar com um pipeline de agregação - basta colocar os dois campos
title
eversion
em$map
$unset
não é necessário porque$map
irá substituir os dados antigos por novos campos emin
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
}
]
})
Playground
Segunda maneira, para uma abordagem mais dinâmica
$mergeObjects
dentro de$map
, para evitar a lista manual de pares de valores-chave$unset
estágio para removername
campo deversion
matriz
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
}
]
})
Playground