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.