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

Como renomeio campos ao realizar pesquisa/projeção no MongoDB?


Então, basicamente, usando .aggregate() em vez de .find() :
db.tweets.aggregate([
    { "$project": {
        "_id": 0,
        "coords": "$level1.level2.coordinates"
    }}
])

E isso lhe dá o resultado que você deseja.

As versões do MongoDB 2.6 e superiores retornam um "cursor" assim como find.

Consulte $project e outros operadores de estrutura de agregação para obter mais detalhes.

Na maioria dos casos você deve simplesmente renomear os campos como retornados de .find() ao processar o cursor. Para JavaScript como exemplo, você pode usar .map() para fazer isso.

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

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

Isso evita qualquer sobrecarga adicional no servidor e deve ser usado em casos em que a sobrecarga de processamento adicional supere o ganho de redução real no tamanho dos dados recuperados. Nesse caso (e na maioria) seria mínimo e, portanto, melhor reprocessar o resultado do cursor para reestruturar.