javascript - mongodb unexpected behavior when saving subdocs -
मैं एक मोंगोज़ .find
क्वेरी के बाद यह करता हूं:
data2 [0] .videos [अस्थायी] .markModified ( 'fakeName'); Data2 [0] .ave (फ़ंक्शन (त्रुटि, उत्पाद, संख्या प्रभावी) {if (err) {console.log ("मेनिफेस्ट सहेजने में त्रुटि") console.log (err); var back = {success: false, reason: err} ; कॉलबैक (वापस); वापसी;} अगर (numberAffected & gt; = 1) {console.log ( "बचाया प्रकट", product.videos [अस्थायी]); वर वापस = {सफलता: सच}; कॉलबैक (वापस); वापसी; } और {console.log ("कुछ भी नहीं बचाया"); कॉलबैक ({सफलता: झूठी}); वापसी;}});
कौन इस प्रिंट:
प्रकट बचाया {fakeName: 'devrenameTest', नाम: 'bkdyZVb--', संस्करण: 1, DateCreated: 1406846165732, dateUpdated: 1406846165732, vidLoc: '[हटाया यूआरएल]', thumbLoc: '[यूआरएल हटाया]', लेखक: '53a47a469c52c9d83a2d71d9', _ id: 53dac4d533c061dd0b000007, sharedWithGroups: [], sharedWith: [], टैग: []} ऐसा लगता है कि सही काम किया है?
लेकिन फिर अगर मैं अपने डेटाबेस पर गौर करता हूँ, तो मुझे केवल वीडियो
के अंदर एक सबडॉक दिखाई देता है एक नकली नाम
फ़ील्ड, और जिस ऑब्जेक्ट को मैं संशोधित कर रहा था वह बिना fakeName
फ़ील्ड है।
क्या चल रहा है?
I
डेटा 2 [0] .markmodified ('वीडियो');
और उसको ठीक करने के लिए वहां से पहली पंक्ति को बदल दिया।
मैं अभी भी जवाबों को स्वीकार करता हूं कि क्या हो रहा है इसकी एक व्याख्या के आधार पर। > चूंकि यह एक स्कीमा-कम प्रकार है, आप सी किसी चीज़ को वैल्यू बदलते हैं, जिसे आप पसंद करते हैं, लेकिन मोंगोज स्वत: का पता लगाने और उन परिवर्तनों को सहेजने की क्षमता खो देता है नेवला "बता" करने के लिए है कि एक मिश्रित प्रकार का मान बदल गया है, दस्तावेज़ मिश्रित प्रकार तुम सिर्फ बदल करने के लिए पथ में उत्तीर्ण होने की विधि .markModified (पथ) कहते हैं।
में इस प्रकार एम्बेडेड दस्तावेजों या सरणियों (जो कोई स्कीमा है) किस प्रकार (अनिवार्य रूप से कोई मान्यता) मिलाया है, तो आप स्पष्ट रूप से नेवला कि विशेष रूप से क्षेत्र सहेजने से पहले संशोधित किया गया है बताने के लिए की है।
और के लिए खोज पर एक नज़र डालें markModified
। जानकारीपूर्ण नहीं हैं
आपके उदाहरण के लिए,
डेटा 2 [0] .markmodified ('वीडियो')
पर्याप्त होगा। मैं डेटा 2 मानता हूं [0] एक मोंगोडीबी दस्तावेज़ है आपको बस एम्बेडेड दस्तावेज़ (मिश्रित स्कीमा) के पथ को देने की आवश्यकता होती है, जिसमें परिवर्तन होते हैं। नहीं अंतरतम स्तर जो बदल गया है
उदाहरण के लिए अगर मेरे पास मॉडल आर्टिस्ट की एक स्कीमा है, {name: String, एल्बम: [{}}} अगर कोई दस्तावेज़ दस्तावेज़ है
{name: [नाम: 'एल्बम 1', गीत: [{नाम: 'song1'}, {name: 'song2'}, {name: 'song3'}}}, {नाम: 'album2', ' गीत: [{नाम: 'song4'}, {name: 'song5'}, {name: 'song6'}]}]}
जब मैं कोई संशोधन करता हूं
doc.albums [1] .songs [2] = 'song25'
मैं सिर्फ मिश्रित प्रकार की सबसे बाहरी पथ निर्दिष्ट करने के लिए की जरूरत है।
< पूर्व> doc.markModified ('एल्बम') doc.save ();
यहां तक कि अगर एल्बम सरणी के घोंसले के शिकार का एक और स्तर है, तो markModified
कॉल समान रहेगा
Comments
Post a Comment