तो मूल रूप से .aggregate()
. का उपयोग कर रहे हैं इसके बजाय .find()
:
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
और यह आपको वह परिणाम देता है जो आप चाहते हैं।
MongoDB 2.6 और इसके बाद के संस्करण एक "कर्सर" लौटाते हैं जैसे कि खोज करता है।
देखें $project
और अधिक विवरण के लिए अन्य एकत्रीकरण फ्रेमवर्क ऑपरेटर।
अधिकांश मामलों के लिए आपको बस .find()
. से लौटाए गए फ़ील्ड का नाम बदलना चाहिए कर्सर को संसाधित करते समय। उदाहरण के तौर पर जावास्क्रिप्ट के लिए, आप .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 })
)
यह सर्वर पर किसी भी अतिरिक्त ओवरहेड से बचा जाता है और ऐसे मामलों में उपयोग किया जाना चाहिए जहां अतिरिक्त प्रोसेसिंग ओवरहेड पुनर्प्राप्त डेटा के आकार में वास्तविक कमी के लाभ से अधिक होगा। इस मामले में (और अधिकांश) यह न्यूनतम होगा और इसलिए कर्सर परिणाम को पुन:संसाधित करने के लिए बेहतर होगा।