Guardar una propiedad de matriz en un esquema de Mongoose

Tengo un esquema de objeto de mongoose que se parece a lo siguiente:

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

Estoy tratando de crear una nueva publicación usando lo 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 imágenes. ¿Qué estoy haciendo mal?

Te estás perdiendo el objeto imagePost de tu esquema en tu nuevo objeto. Intenta 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(); 

Acabo de hacer algo similar, en mi caso adjunto a una colección existente, vea esta pregunta / respuesta. Te puede ayudar:

Mongoose / MongoDB: ejemplo simple de adición a una matriz de objetos de documento, con un esquema predefinido

Su problema es que en Mongoose no puede tener objetos nesteds, solo esquemas nesteds. Así que necesitas hacer algo como esto (para tu estructura deseada):

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