MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Requête d'agrégation MongoDB - Renommer les champs renvoyés à partir de documents intégrés

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.