2012-03-08 10 views
5

मुझे एक परिणाम (ऑब्जेक्ट) एक मोंगोज़ क्वेरी से वापस मिल रहा है और ऑब्जेक्ट को स्ट्रिंग करने और क्लाइंट को भेजने से पहले कुछ चाबियों को प्रतिस्थापित/निकालना चाहता हूं।नोड में किसी ऑब्जेक्ट पर निरीक्षण/पुनरावृत्ति कैसे करें?

जब मैं ऑब्जेक्ट को console.log करता हूं, तो सबकुछ अच्छा होता है (सभी चाबियाँ सूचीबद्ध होती हैं, और कुछ नहीं)। जब मैं ऑब्जेक्ट पर for..in करता हूं, छुपा फ़ील्ड कहीं से बाहर पॉपअप नहीं करता है (और ब्याज की चाबियाँ नहीं)। वे समझ में आता है - वे मोंगोस से संबंधित हैं - लेकिन मैं उन्हें नहीं चाहता हूं। ऑब्जेक्ट पर ऑब्जेक्ट.कीज या ऑब्जेक्ट.getOwnPropertyNames का उपयोग करते समय वही बात होती है - छिपे हुए फ़ील्ड पॉपअप, कोई भी उपयोगी नहीं।

तो मैं element.inspect (obj, true, null, true) के साथ तत्व का निरीक्षण करना चाहता था और परिणाम को कंसोल पर लॉग ऑन करना चाहता था। कंसोल पर नतीजा वही है, जैसे कि मैं कंसोल करता हूं। सीधे निरीक्षण के बिना वस्तु को लॉग इन करता हूं।

अब, दो प्रश्न;

  1. मैं ऑब्जेक्ट का सही तरीके से निरीक्षण कैसे करूं, ताकि मुझे वास्तव में वस्तु के बारे में आंतरिक/छिपी जानकारी मिल सके?
  2. मैं ऑब्जेक्ट पर फिर से कैसे जा सकता हूं और केवल फ़ील्ड प्राप्त कर सकता हूं? (हाँ, मैं for..in पाश के भीतर hasOwnProperty जाँच कर रहा हूँ)

// संपादित

ठीक है, मैं समझ गया। कुछ जांच के बाद, मुझे एहसास हुआ कि मोंगोज़ ऑब्जेक्ट इसकी गुणों को प्रॉक्सी करता है और एक toJSON फ़ंक्शन है, जो बताता है कि console.logs अपेक्षित आउटपुट संरचना में क्यों थे। समाधान मोंगोस को ऑब्जेक्ट विधि के लिए उपयोग करना है;

mongooseObj.toObject({ getters: true, virtuals: false }) 

इस तरह, मैं Object.getOwnPropertyNames से अधिक पुनरावृति कर सकते हैं और की जगह/कुंजी को दूर मैं ग्राहक के बारे में पता करने के लिए नहीं चाहता!

+0

क्या आप अपने प्रश्न को थोड़ा सा दोहरा सकते हैं? मुझे समझने में कठिनाई हो रही है कि आप क्या पूछ रहे हैं। 'छुपे हुए खेतों' से आपका क्या मतलब है? क्या यह केवल गुण है जो प्रोटोटाइप श्रृंखला को ऊपर उठाता है? गुण जो गैर-गणना के रूप में चिह्नित हैं? या गुण जो _underscore से शुरू होते हैं? –

उत्तर

4

मुझे लगता है कि तुम दस्तावेज़ वस्तु एक नेवला क्वेरी द्वारा रिटर्न पर देख रहे हैं जा रहा हूँ जब आप वास्तव में सिर्फ डेटा देखना चाहते हैं।

Model.findOne({ name: 'john' }, function (err, doc) { 
    var data = doc.toObject(); 

    // do whatever you need to with data 
    delete data.age; 
    delete data.weight; 
    data.isAwesome = true; 

    // now stringify the data and do something with it 
    callback(JSON.stringify(data)); 
}); 
+1

अरे abe, आपके उत्तर के लिए धन्यवाद। मैं वास्तव में अभी देखता हूं, कि आपको अपने उत्तर में ऑब्जेक्ट करना था .. शुरुआत से ही देखा जाना चाहिए;) आपकी मदद के लिए धन्यवाद! – japrescott

0

इसके अलावा, आप एक दस्तावेज़ से एक निश्चित क्षेत्र का उपयोग करना चाहते हैं तो आप पर एक नज़र ले जा सकते हैं:

Document#get तो मेरा अनुमान सही है, तो आप शायद कुछ इस तरह चाहता हूँ

// path 
doc.get('age') // 47 

// dynamic casting to a string 
doc.get('age', String) // "47" 

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

  • कोई संबंधित समस्या नहीं^_^