sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta de agregación de MongoDB:cambiar el nombre de los campos devueltos desde dentro de los documentos incrustados

Hay un par de enfoques para esto, pero depende en gran medida de su versión de MongoDB. Las versiones más recientes de 2.6 y posteriores admiten $map operador que puede usar en $project para hacer lo que quieras:

db.friend.aggregate([
    { "$project": {
        "name": 1,
        "buddies": {
            "$map": {
                "input": "$friends",
                "as": "el",
                "in": {
                    "nickName": "$$el.name",
                    "age": "$$el.age"
                }
            }
        }
    }}
])

En versiones anteriores, usaría $unwind para trabajar con los elementos de la matriz y reconstruir a través de $group :

db.collection.aggregate([
    { "$unwind": "$friends" },
    { "$group": {
        "_id": "$_id",
        "name": { "$first": "$name" },
        "buddies": {
            "$push": {
                "nickName": "$friends.name",
                "age": "$friends.age"
            }
        }
    }}
])

Con el primer formulario siendo un poco más eficiente ya que no está desnormalizando el contenido de la matriz y produciendo más documentos en proceso para procesar.