Il existe plusieurs approches pour cela, mais cela dépend en grande partie de votre version de MongoDB. Les versions plus récentes de 2.6 et supérieures prennent en charge le $map
opérateur que vous pouvez utiliser dans $project
faire ce que tu veux :
db.friend.aggregate([
{ "$project": {
"name": 1,
"buddies": {
"$map": {
"input": "$friends",
"as": "el",
"in": {
"nickName": "$$el.name",
"age": "$$el.age"
}
}
}
}}
])
Dans les versions précédentes, vous utilisiez $unwind
pour travailler avec les éléments du tableau et reconstruire via $group
:
db.collection.aggregate([
{ "$unwind": "$friends" },
{ "$group": {
"_id": "$_id",
"name": { "$first": "$name" },
"buddies": {
"$push": {
"nickName": "$friends.name",
"age": "$friends.age"
}
}
}}
])
Le premier formulaire étant un peu plus efficace car vous ne dénormalisez pas le contenu du tableau et ne produisez pas plus de documents dans le pipeline à traiter.