MongoDb将每个子文档中的字段转换为数组



我有一个学生集合,每个学生有一个或多个地址,每个地址有一个电话号码,但现在我需要将其更改为电话号码列表,因此,一个数组。

我试过了,但结果是它创建了一个电话数组,并在一个新的数组中使用电话,所以由于某种原因,双数组:

db.students.updateMany(
{ "address.phone": { $exists: true } },
[{ $set: { "address.phone": ["$address.phone"] } }]
)

然后我尝试了这个,但结果是它从学生的所有地址中获取所有电话,并将它们放在所有地址的数组中,所以如果学生有3个地址,每个地址有1个电话,那么他的所有地址现在都有3个电话号码。

db.students.updateMany(
{ "address.phone": { $exists: true } },
[{ $set: { "address.phone": "$address.phone" } }]
)

我真的不明白这是如何工作的,我怎么能写一些像"为每个地址做一个数组,并插入当前值作为元素0的数组"?

谢谢你的帮助。

db.students.update({
"address.phone": {$exists: true}
},
[
{
$set: {
"address": {
$map: {
input: "$address",                         //for each address in the array
in: {
$mergeObjects: [
"$$this",                              //merge the whole address with modified phone field
{
phone: {
$cond: [
{$gt: ["$$this.phone",null]},    //if, phone is present in a address
["$$this.phone"],                //make it an array
"$$REMOVE"                       //else, don't keep it
]
}
}
]
}
}
}
}
}
])

演示