- Lỗi cho biết
$map
input
của chấp nhận trường tham chiếu bằng$
ký tên$version
, - gửi kèm theo
u
đối tượng trong dấu ngoặc nhọn mảng cho cập nhật với một đường ống tổng hợp - chỉ cần đặt cả hai trường
title
vàversion
trong$map
-
$unset
không bắt buộc vì$map
sẽ thay thế dữ liệu cũ bằng các trường mới trongin
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
}
]
})
Cách thứ hai, Để có cách tiếp cận năng động hơn
-
$mergeObjects
bên trong$map
, để ngăn danh sách thủ công của cặp khóa-giá trị -
$unset
giai đoạn xóaname
trường từversion
mảng
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
}
]
})