- De fout zegt
$map
'sinput
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
enversion
in$map
$unset
is niet vereist omdat$map
zal oude gegevens vervangen door nieuwe velden 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
}
]
})
Tweede manier, voor een meer dynamische benadering
$mergeObjects
binnen$map
, om handmatige lijst van sleutel-waardenpaar te voorkomen$unset
fase omname
te verwijderen veld vanversion
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
}
]
})