2012-10-01 12 views
7

ho uno schema oggetto mangusta che sembra simile al seguente:Salvataggio di una proprietà di matrice su uno schema di Mongoose

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

Sto cercando di creare un nuovo post usando la seguente:

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(); 

Tuttavia, una volta salvato il post, viene creato con una matrice vuota per la proprietà images. Che cosa sto facendo di sbagliato?

risposta

6

Ti manca l'oggetto dello schema imagePost nel vostro nuovo oggetto. Prova invece:

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

Ho appena fatto qualcosa di simile, nel mio caso aggiungendo a una raccolta esistente, si prega di vedere questa domanda/risposta. Essa può aiutare:

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

Il tuo problema è che in Mongoose non si può avere annidati gli oggetti, solo schemi nidificati. Quindi è necessario fare qualcosa di simile (per la struttura desiderata):

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

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

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

Poiché v3 non è necessario specificare schemi per questi oggetti secondari, è sufficiente specificarli come valori letterali oggetto nello schema padre. – UpTheCreek

Problemi correlati