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

¿Cómo cambio el nombre de los campos cuando realizo una búsqueda/proyección en MongoDB?

Así que básicamente usando .aggregate() en lugar de .find() :

db.tweets.aggregate([
    { "$project": {
        "_id": 0,
        "coords": "$level1.level2.coordinates"
    }}
])

Y eso te da el resultado que quieres.

MongoDB 2.6 y las versiones superiores devuelven un "cursor" como lo hace find.

Ver $project y otros operadores del marco de agregación para obtener más detalles.

Para la mayoría de los casos, simplemente debe cambiar el nombre de los campos como devueltos por .find() al procesar el cursor. Para JavaScript como ejemplo, puede usar .map() para hacer esto.

Del caparazón:

db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => {
  doc.coords = doc['level1']['level2'].coordinates;
  delete doc['level1'];
  return doc;
})

O más en línea:

db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => 
  ({ coords: doc['level1']['level2'].coordinates })
)

Esto evita cualquier sobrecarga adicional en el servidor y debe usarse en aquellos casos en los que la sobrecarga de procesamiento adicional supere la ganancia de la reducción real en el tamaño de los datos recuperados. En este caso (y en la mayoría) sería mínimo y, por lo tanto, mejor volver a procesar el resultado del cursor para reestructurarlo.