- エラーには
$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
}
]
})