I have a mongoose object schema that looks similar to the following:
var postSchema = new Schema({
imagePost: {
images: [{
url: String,
text: String
}]
});
I'm trying to create a new post using the following:
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();
However, once I save the post, it's created with an empty array for the images property. What am I doing wrong?
I've just done something similar, in my case appending to an existing collection, please see this question/answer. It may help you:
Mongoose / MongoDB - Simple example of appending to a document object array, with a pre-defined schema
Your problem is that in Mongoose you can't have nested objects, only nested Schemas. So you need to do something like this (for your desired structure):
var imageSchema = new Schema({
url: {type:String},
text: {type:String}
});
var imagesSchema = new Schema({
images : [imageSchema]
});
var postSchema = new Schema({
imagePost: [imagesSchema]
});
You're missing the imagePost
object of your schema in your new object. Try this instead:
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With