Er zijn een aantal benaderingen hiervoor, maar dit hangt grotendeels af van uw MongoDB-versie. Recentere versies vanaf 2.6 ondersteunen de $ kaart
operator die u kunt gebruiken in $project
om te doen wat je wilt:
db.friend.aggregate([
{ "$project": {
"name": 1,
"buddies": {
"$map": {
"input": "$friends",
"as": "el",
"in": {
"nickName": "$$el.name",
"age": "$$el.age"
}
}
}
}}
])
In eerdere versies zou u $unwind
om met de array-elementen te werken en opnieuw te construeren via $groep
:
db.collection.aggregate([
{ "$unwind": "$friends" },
{ "$group": {
"_id": "$_id",
"name": { "$first": "$name" },
"buddies": {
"$push": {
"nickName": "$friends.name",
"age": "$friends.age"
}
}
}}
])
Met de eerste vorm die iets efficiënter is, omdat u de array-inhoud niet de-normaliseert en meer documenten produceert die in de pijplijn zitten om te verwerken.