Ci sono un paio di approcci a questo, ma dipende in gran parte dalla tua versione di MongoDB. Versioni più recenti dalla 2.6 in poi supportano il $map
operatore che puoi utilizzare in $project
per fare quello che vuoi:
db.friend.aggregate([
{ "$project": {
"name": 1,
"buddies": {
"$map": {
"input": "$friends",
"as": "el",
"in": {
"nickName": "$$el.name",
"age": "$$el.age"
}
}
}
}}
])
Nelle versioni precedenti avresti utilizzato $unwind
per lavorare con gli elementi dell'array e ricostruire tramite $group
:
db.collection.aggregate([
{ "$unwind": "$friends" },
{ "$group": {
"_id": "$_id",
"name": { "$first": "$name" },
"buddies": {
"$push": {
"nickName": "$friends.name",
"age": "$friends.age"
}
}
}}
])
Con il primo modulo un po' più efficiente in quanto non si denormalizza il contenuto dell'array e si producono più documenti in cantiere da elaborare.