Więc w zasadzie używając .aggregate()
zamiast .find()
:
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
A to daje pożądany rezultat.
MongoDB 2.6 i nowsze wersje zwracają „kursor”, tak jak robi to find.
Zobacz $project
i inne operatory ram agregacji, aby uzyskać więcej informacji.
W większości przypadków należy po prostu zmienić nazwy pól zwrócone z .find()
podczas przetwarzania kursora. W przypadku JavaScript jako przykładu możesz użyć .map()
aby to zrobić.
Z powłoki:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => {
doc.coords = doc['level1']['level2'].coordinates;
delete doc['level1'];
return doc;
})
Lub więcej inline:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc =>
({ coords: doc['level1']['level2'].coordinates })
)
Pozwala to uniknąć dodatkowego obciążenia serwera i powinno być stosowane w takich przypadkach, w których dodatkowe obciążenie przetwarzania przewyższałoby korzyści wynikające z faktycznego zmniejszenia rozmiaru pobieranych danych. W tym przypadku (i większości) byłoby to minimalne i dlatego lepiej przetworzyć wynik kursora w celu restrukturyzacji.