Så grundlæggende ved at bruge .aggregate()
i stedet for .find()
:
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
Og det giver dig det resultat, du ønsker.
MongoDB 2.6 og nyere versioner returnerer en "cursor" ligesom find gør.
Se $project
og andre aggregeringsrammeoperatører for flere detaljer.
I de fleste tilfælde skal du blot omdøbe felterne som returneret fra .find()
når du behandler markøren. For JavaScript som et eksempel kan du bruge .map()
at gøre dette.
Fra skallen:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => {
doc.coords = doc['level1']['level2'].coordinates;
delete doc['level1'];
return doc;
})
Eller mere inline:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc =>
({ coords: doc['level1']['level2'].coordinates })
)
Dette undgår yderligere overhead på serveren og bør bruges i sådanne tilfælde, hvor de ekstra behandlingsomkostninger ville opveje gevinsten ved den faktiske reduktion i størrelsen af de hentede data. I dette tilfælde (og de fleste) ville det være minimalt og derfor bedre at genbehandle markørresultatet for at omstrukturere.