2012-10-01 16 views
7

मैं एक नेवला वस्तु स्कीमा कि निम्न के समान दिखता है पर एक सरणी संपत्ति सहेजा जा रहा है:एक नेवला स्कीमा

var new_post = new Post(); 
new_post.images = []; 
for (var i in req.body.post_content.images) { 
    var image = req.body.post_content.images[i]; 
    var imageObj = { url: image['url'], text: image['text'] }; 
    new_post.images.push(imageObj); 
} 
new_post.save(); 
:

var postSchema = new Schema({ 
    imagePost: { 
    images: [{ 
     url: String, 
     text: String 
    }] 
}); 

मैं का उपयोग कर एक नया पद बनाने के लिए निम्नलिखित कोशिश कर रहा हूँ

हालांकि, एक बार जब मैं पोस्ट को सहेजता हूं, तो यह छवियों की संपत्ति के लिए एक खाली सरणी के साथ बनाया गया है। मैं क्या गलत कर रहा हूं?

उत्तर

6

आप अपने नए वस्तु में अपने स्कीमा की imagePost वस्तु नहीं मिली है। ऐसा करें:

var new_post = new Post(); 
new_post.imagePost = { images: [] }; 
for (var i in req.body.post_content.images) { 
    var image = req.body.post_content.images[i]; 
    var imageObj = { url: image['url'], text: image['text'] }; 
    new_post.imagePost.images.push(imageObj); 
} 
new_post.save(); 
2

मैंने कुछ ऐसा ही किया है, मेरे मामले में मौजूदा संग्रह में शामिल होने पर, कृपया यह प्रश्न/उत्तर देखें। यह आपकी मदद कर सकता है:

Mongoose/MongoDB - Simple example of appending to a document object array, with a pre-defined schema

आपका समस्या यह है कि नेवला में आप वस्तुओं, केवल नेस्टेड स्कीमा नेस्ट नहीं कर सकते हैं। तो अगर आप (अपने वांछित संरचना के लिए) कुछ इस तरह करने की जरूरत है:

var imageSchema = new Schema({ 
    url: {type:String}, 
    text: {type:String} 
}); 

var imagesSchema = new Schema({ 
    images : [imageSchema] 
}); 

var postSchema = new Schema({ 
    imagePost: [imagesSchema] 
}); 
+3

के बाद से v3 आप इन उप-वस्तुओं के लिए स्कीमा निर्दिष्ट करने की आवश्यकता नहीं है, आप सिर्फ उन्हें माता-पिता स्कीमा में वस्तु शाब्दिक रूप में निर्दिष्ट कर सकते हैं। – UpTheCreek

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