2012-10-01 19 views
7

Tengo un esquema de objetos mangosta que tiene una apariencia similar a la siguiente:Guardar una propiedad de matriz en un esquema Mangosta

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

estoy tratando de crear una nueva entrada utilizando la siguiente:

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

Sin embargo, una vez que guardo la publicación, se crea con una matriz vacía para la propiedad de las imágenes. ¿Qué estoy haciendo mal?

Respuesta

6

Te estás perdiendo el imagePost objeto de su esquema en el nuevo objeto. Pruebe esto en su lugar:

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

Acabo de hacer algo similar, en mi caso anexando una colección existente, por favor vea esta pregunta/respuesta. Puede ayudarle a:

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

Su problema es que en la mangosta no puede haber anidado objetos, sólo esquemas anidados. Así que hay que hacer algo como esto (por su estructura deseada):

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

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

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

Dado que v3 no necesita especificar esquemas para estos subobjetos, puede simplemente especificarlos como literales de objeto en el esquema principal. – UpTheCreek

Cuestiones relacionadas