2014-05-21 1 views
23

क्या एक खोज क्वेरी में दिए गए फ़ील्ड के नाम का नाम बदलना संभव है? मैं $rename जैसे कुछ का उपयोग करना चाहता हूं, हालांकि मैं उन दस्तावेज़ों को बदलना नहीं चाहूंगा जिन्हें मैं एक्सेस कर रहा हूं। मैं बस उन्हें अलग-अलग प्राप्त करना चाहता हूं, कुछ ऐसा जो SQL में SELECT COORINATES AS COORDS जैसा काम करता है।MongoDB में खोज/प्रक्षेपण करते समय मैं फ़ील्ड का नाम कैसे बदलूं?

अब मुझे क्या करना:

db.tweets.findOne({}, {'level1.level2.coordinates': 1, _id:0}) 
{'level1': {'level2': {'coordinates': [10, 20]}}} 

मैं लौटा दी चाहते हैं क्या है:

db.tweets.aggregate([ 
    { "$project": { 
     "_id": 0, 
     "coords": "$level1.level2.coordinates" 
    }} 
]) 

और वह: {'coords': [10, 20]}

उत्तर

23

तो मूल रूप से .aggregate() बजाय .find() का उपयोग कर आपको वह परिणाम देता है जो आप चाहते हैं।

MongoDB 2.6 और ऊपर वाले संस्करणों को ढूंढने की तरह "कर्सर" वापस लौटाता है। अधिक जानकारी के लिए

$project और अन्य aggregation framework operators देखें।


ज्यादातर मामलों के लिए आप बस खेतों जब कर्सर प्रसंस्करण .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 }) 
) 

इस सर्वर पर किसी भी अतिरिक्त भूमि के ऊपर से बचा जाता है और ऐसे मामलों में इस्तेमाल किया जाना चाहिए जहां अतिरिक्त संसाधन भूमि के ऊपर लाभ पल्ला झुकना होगा पुनर्प्राप्त डेटा के आकार में वास्तविक कमी का। इस मामले में (और सबसे अधिक) यह न्यूनतम होगा और इसलिए कर्सर परिणाम को पुन: स्थापित करने के लिए फिर से संसाधित करना बेहतर होगा।

संबंधित मुद्दे