मुझे मोंगो डीबी में, मोंगोस और नोड.जे.एस. के माध्यम से, मोंगो डीबी में नेस्टेड स्कीमा की कई गहराई को सम्मिलित करने में समस्या हो रही है।नोड, मोंगोस, नेस्टेड स्कीमा की कई गहराई को बचाने में समस्याएं
नीचे दिया गया उदाहरण थोड़ा सा योगदान है लेकिन उम्मीद है कि मेरी समस्या को समझाना चाहिए। क्यों प्रत्येक स्कीमा को एक पूर्ण मॉडल के रूप में परिभाषित किया जाता है लेकिन उदाहरण में उपयोग नहीं किया जाता है, यह सिर्फ इसलिए है क्योंकि मेरी असली दुनिया की समस्या में, वे वास्तविक, प्रयोग योग्य मॉडल हैं और मैं चाहता हूं कि यह उदाहरण प्रासंगिक होने पर यथार्थवादी हो।
तो यहां रिवर्स ऑर्डर में उदाहरण स्कीमा परिभाषाएं हैं, यानी। छोटी से छोटी रूसी गुड़िया पहले:
// Define pen model
var PenSchema = new Schema({
color: String // black, blue or red
});
var Pen = mongoose.model('Pen', PenSchema);
// Define ruler model
var RulerSchema = new Schema({
units: String // inches or millimetres
});
var Ruler = mongoose.model('Ruler', RulerSchema);
// --------
// Define drawing tools model
var DrawingToolsSchema = new Schema({
label: String,
pens: [Pen]
});
var DrawingTools = mongoose.model('DrawingTools', DrawingToolsSchema);
// Define measuring tools model
var MeasuringToolsSchema = new Schema({
label: String,
ruler: [Ruler]
});
var MeasuringTools = mongoose.model('MeasuringTools', MeasuringToolsSchema);
// --------
// Define stationery box model
// It has a label and two compartments - tools for drawing and measuring
var StationeryBoxSchema = new Schema({
label: String,
drawingTools: [DrawingToolsSchema],
measuringTools: [MeasuringToolsSchema]
});
var StationeryBox = mongoose.model('StationeryBox', StationeryBoxSchema);
उम्मीद है कि आप इस से बता सकते हैं एक मुख्य मॉडल, StationeryBox है, जो एक लेबल है और DrawingTools और MeasuringTools जो स्कीमा नेस्टेड रहते हैं के लिए दो डिब्बों में शामिल नहीं है। बदले में वे अपने स्वयं के लेबल होते हैं और पेन और शासकों के लिए नेस्टेड स्कीमा होते हैं। मुझे जो समस्या है वह दूसरे स्तर के घोंसले को डाला गया है, यानी। कलम/शासकों। तो मोंगोज़ डॉक्स पर आधारित, शीर्ष स्तर का मॉडल बनाना, और पहली नेस्टेड ऑब्जेक्ट्स में धक्का देना ठीक काम करता है, फिर परेशानी होती है। उदाहरण के लिए:
// To create my stationery box - this works
var stationery = new StationeryBox({ label: 'My Stationery Box' });
// To add the nested compartments - this works
stationery.drawingTools.push({ label: 'My Pens' });
stationery.measuringTools.push({ label: 'My Rulers' });
// But this is wrong as 'stationery.drawingTools.pens' is undefined
stationery.drawingTools.pens.push({ color: 'red' });
stationery.drawingTools.pens.push({ color: 'black' });
और अगर मैं एक चरण पीछे जाएं और ड्राइंग उपकरण के रूप में एक ही समय में कलम को सम्मिलित करने का प्रयास करें: मैं जानता हूँ कि यह एक सुपर यथार्थवादी उदाहरण नहीं है
// Also wrong - presumably the second level of nesting is the problem
stationery.drawingTools.push({
label: 'My Pens',
pens: [ // These object represent second levels of nested schema
{ color: 'red' },
{ color: 'black' }
]
});
, लेकिन यह एक असली दुनिया प्रणाली का एक सरलीकृत उदाहरण है जिसे मैं बना रहा हूं और यह वर्णन करने का सबसे आसान तरीका था।
वास्तविक बचत इस कोर्स के बाद होती है और मैंने इसे छोड़ दिया है, लेकिन क्या मुझे इन कॉलबैक को सहेजने के लिए इन अगले स्तरों को जोड़ने की ज़रूरत है?
अगर कोई मुझे बता सकता है कि मैं इस पर गलत कहां जा रहा हूं या मुझे सही दिशा में इंगित करता हूं तो मैं आपको एक अच्छा केक खरीदूंगा (काल्पनिक केक केवल मुझे डर है, जब तक कि आप मेरे पास न रहें)।
धन्यवाद डैनियल। बेशक, आप पूरी तरह से सही है। यह मूल समस्या पोस्ट करने के कुछ दिनों बाद रहा है और मैंने उस समय बहुत कुछ सीखा है, इसलिए मॉडल को एम्बेड करने का प्रयास करने पर मुझे वास्तव में याद नहीं आ रहा है और स्कीमा मेरे उदाहरण कोड में केवल एक टाइपो नहीं था (जिसमें अगर मेरे पास कहीं और गड़बड़ है) या अगर मैं अपनी "असली दुनिया" कोड में एक ही गलती कर दूंगा (जो तब से बहुत बदल गया है तो मैं जांच नहीं सकता;))। लेकिन जैसा कि आप कहते हैं कि यह बाद के व्यवहार की व्याख्या करेगा ताकि आप शायद सही हो! – tdous
मेरी खुशी - मैं समझता हूं कि इस तरह कुछ काम करते समय कुछ दिनों का समय लगता है। शायद नोड सीखने की वक्र का सबसे तेज हिस्सा यह पता लगा रहा है कि चुपचाप विफल होने वाली समस्याओं को कैसे डिबग करना है। –