Så i princip använder du .aggregate()
istället för .find()
:
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
Och det ger dig det resultat du vill ha.
MongoDB 2.6 och senare versioner returnerar en "markör" precis som find gör.
Se $project
och andra aggregeringsramverksoperatörer för mer information.
I de flesta fall bör du helt enkelt byta namn på fälten som returneras från .find()
när du bearbetar markören. För JavaScript som ett exempel kan du använda .map()
för att göra detta.
Från skalet:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => {
doc.coords = doc['level1']['level2'].coordinates;
delete doc['level1'];
return doc;
})
Eller mer inline:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc =>
({ coords: doc['level1']['level2'].coordinates })
)
Detta undviker ytterligare overhead på servern och bör användas i sådana fall där den extra bearbetningskostnaden skulle uppväga vinsten av den faktiska minskningen av storleken på den data som hämtas. I det här fallet ( och de flesta ) skulle det vara minimalt och därför bättre att bearbeta markörresultatet för att omstrukturera.