- Грешката гласи
$map
input
на приема референтно поле с помощта на$
знак$version
, - оградете
u
обект в скоба на масив за актуализация с тръбопровод за агрегиране - просто поставете и двете полета
title
иversion
в$map
$unset
не се изисква, защото$map
ще замени старите данни с нови полета в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
}
]
})
Втори начин, за по-динамичен подход
$mergeObjects
вътре в$map
, за да предотвратите ръчен списък с двойка ключ-стойности$unset
етап за премахване наname
поле отversion
масив
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
}
]
})