- L'erreur indique
$map
l'input
de accepte le champ de référence en utilisant$
signer$version
, - joindre le
u
objet dans le support de tableau pour mise à jour avec un pipeline d'agrégation - il suffit de mettre les deux champs
title
etversion
dans$map
$unset
n'est pas nécessaire car$map
remplacera les anciennes données par de nouveaux champs dansin
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
}
]
})
Deuxième voie, pour une approche plus dynamique
$mergeObjects
à l'intérieur de$map
, pour empêcher la liste manuelle des paires clé-valeur$unset
étape pour supprimername
champ deversion
tableau
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
}
]
})