MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consulta de agregação do MongoDB - renomear campos retornados de dentro de documentos incorporados


Existem algumas abordagens para isso, mas depende muito da sua versão do MongoDB. Versões mais recentes de 2.6 e superiores suportam o $ mapa operador que você pode usar em $project para fazer o que você quer:
db.friend.aggregate([
    { "$project": {
        "name": 1,
        "buddies": {
            "$map": {
                "input": "$friends",
                "as": "el",
                "in": {
                    "nickName": "$$el.name",
                    "age": "$$el.age"
                }
            }
        }
    }}
])

Nas versões anteriores, você usaria $unwind para trabalhar com os elementos do array e reconstruí-los via $grupo :
db.collection.aggregate([
    { "$unwind": "$friends" },
    { "$group": {
        "_id": "$_id",
        "name": { "$first": "$name" },
        "buddies": {
            "$push": {
                "nickName": "$friends.name",
                "age": "$friends.age"
            }
        }
    }}
])

Com o primeiro formulário sendo um pouco mais eficiente, pois você não está desnormalizando o conteúdo da matriz e produzindo mais documentos no pipeline para processar.