अपडेट करें
शायद मैंने आपके मूल प्रश्न को गलत समझा, लेकिन अब ऐसा लगता है कि आपके प्रश्न का स्वरूप बदल गया है, इसलिए नीचे दी गई जानकारी प्रासंगिक नहीं है, लेकिन मैं इसे छोड़ रहा हूं। :)
मैंने आपके कोड का परीक्षण किया और यह मेरे लिए ठीक काम करता है। जब आप ऐसे गुण सेट करते हैं जो स्कीमा (या कुछ अन्य विशेष गुण) का हिस्सा नहीं हैं, तो Mongoose कोई विशेष कोड निष्पादित नहीं करता है। जावास्क्रिप्ट वर्तमान में उन संपत्तियों के लिए कॉलिंग कोड का समर्थन नहीं करता है जो अभी तक मौजूद नहीं हैं (इसलिए Mongoose goo
के सेट के रास्ते में नहीं आ सकता है उदाहरण के लिए संपत्ति)।
इसलिए, जब आप प्रॉपर्टी सेट करते हैं:
foo.goo = { c: 1 };
नेवला शामिल नहीं है। अगर आपका console.log
आपके द्वारा प्रदर्शित कोड के अलावा कुछ और था, मैं देख सकता था कि यह गलत तरीके से रिपोर्ट कर सकता है।
इसके अतिरिक्त, जब आप send
परिणाम वापस JSON के रूप में, JSON.stringify
कॉल किया जा रहा है, जो toString
. को कॉल करता है अपने नेवला मॉडल पर। जब ऐसा होता है, तो Mongoose केवल स्कीमा में परिभाषित गुणों का उपयोग करता है। इसलिए, डिफ़ॉल्ट रूप से कोई अतिरिक्त गुण वापस नहीं भेजे जा रहे हैं। आपने data
. की प्रकृति बदल दी है सरणी हालांकि सीधे नेवला डेटा पर इंगित करने के लिए है, इसलिए यह उस समस्या से बचा जाता है।
सामान्य व्यवहार के बारे में विवरण
जब आप प्रॉपर्टी सेट करते हैं goo
नेवला का उपयोग करते हुए, काफी कुछ चीजें होती हैं। नेवला Object.defineProperty
. के माध्यम से संपत्ति प्राप्त करने वाले / बसने वाले बनाता है (कुछ docs
) इसलिए, जब आप goo
. सेट करते हैं संपत्ति, जिसे आपने [String]
. के रूप में परिभाषित किया है , कुछ चीजें होती हैं:
- मोंगोज़ कोड को ऑब्जेक्ट इंस्टेंस पर मान सेट होने से पहले कहा जाता है (एक साधारण जावास्क्रिप्ट ऑब्जेक्ट के विपरीत)
- नेवला डेटा संग्रहीत करने के लिए एक सरणी (वैकल्पिक रूप से) बनाता है (एक
MongooseArray
) जिसमें सरणी डेटा होगा। आपके द्वारा प्रदान किए गए उदाहरण में, चूंकि आपने एक सरणी पास नहीं की है, इसलिए इसे बनाया जाएगा। - नेवला आपके डेटा को सही प्रकार में डालने का प्रयास करेगा
- यह
toString
को कॉल करेगा कलाकारों के हिस्से के रूप में पारित डेटा पर।
तो, परिणाम यह है कि दस्तावेज़ में अब toString
. के साथ एक सरणी है आपके द्वारा पारित वस्तु का संस्करण।
यदि आपने goo
. की सामग्री की जांच की है संपत्ति, आप देखेंगे कि यह अब एक एकल तत्व के साथ एक सरणी है, जो एक स्ट्रिंग है जिसमें [object Object]
शामिल है . यदि आपने अधिक बुनियादी प्रकार चुना है या गंतव्य संपत्ति भंडारण प्रकार से मेल खाता है, तो आप देखेंगे कि एक बुनियादी समानता जांच काम करती।