V zásadě tedy pomocí .aggregate()
místo .find()
:
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
A to vám dá výsledek, který chcete.
Verze MongoDB 2.6 a vyšší vrací "kurzor" stejně jako find.
Viz $project
a dalšími operátory agregačního rámce pro více podrobností.
Ve většině případů byste měli jednoduše přejmenovat pole tak, jak je vráceno z .find()
při zpracování kurzoru. Pro JavaScript jako příklad můžete použít .map()
udělat to.
Z shellu:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => {
doc.coords = doc['level1']['level2'].coordinates;
delete doc['level1'];
return doc;
})
Nebo více inline:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc =>
({ coords: doc['level1']['level2'].coordinates })
)
Tím se zabrání jakékoli další režii na serveru a mělo by být použito v případech, kdy by další režie zpracování převážila nad ziskem ze skutečného snížení velikosti načítaných dat. V tomto případě (a většině ) by bylo minimální, a proto by bylo lepší znovu zpracovat výsledek kurzoru k restrukturalizaci.