Ответ 1
Таким образом, в основном используется .aggregate()
вместо .find()
:
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
И это дает вам результат, который вы хотите.
MongoDB 2.6 и более поздние версии возвращают "курсор", как это делает find.
Смотрите $project
и другие операторы структуры агрегации для более подробной информации.
В большинстве случаев вы должны просто переименовать поля, как возвращено из .find()
при обработке курсора. Для JavaScript в качестве примера вы можете использовать .map()
для этого.
Из оболочки:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => {
doc.coords = doc['level1']['level2'].coordinates;
delete doc['level1'];
return doc;
})
Или более встроенный:
db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc =>
({ coords: doc['level1']['level2'].coordinates })
)
Это позволяет избежать каких-либо дополнительных накладных расходов на сервере и должно использоваться в тех случаях, когда дополнительные накладные расходы обработки перевешивают выигрыш от фактического уменьшения размера извлекаемых данных. В этом случае (и в большинстве случаев) было бы минимальным и, следовательно, лучше повторно обработать результат курсора для реструктуризации.