Quindi, in pratica utilizzando .aggregate()
invece di .find()
:
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
E questo ti dà il risultato che vuoi
MongoDB 2.6 e versioni successive restituiscono un "cursore" proprio come fa find.
Vedere $project
e altri aggregation framework operators per ulteriori dettagli.
Per la maggior parte dei casi si dovrebbe semplicemente rinominare i campi come restituito dal .find()
durante l'elaborazione del cursore. Per JavaScript come esempio, è possibile utilizzare .map()
per farlo.
Dalla shell:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map(doc => {
doc.coords = doc['level1']['level2'].coordinates;
delete doc['level1'];
return doc;
})
O, più in linea:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map(doc =>
({ coords: doc['level1']['level2'].coordinates })
)
questo modo si evita qualsiasi ulteriore sovraccarico sul server e dovrebbe essere utilizzato nei casi in cui il carico di elaborazione aggiuntivo sarebbe superare il guadagno di effettiva riduzione delle dimensioni dei dati recuperati. In questo caso (e soprattutto) sarebbe minimo e quindi meglio rielaborare il risultato del cursore per ristrutturarlo.
fonte
2014-05-21 13:39:22