在Mongoose模式上保存数组属性

时间:2012-10-01 15:59:18

标签: node.js mongodb mongoose

我有一个类似于以下内容的猫鼬对象模式:

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

我正在尝试使用以下内容创建新帖子:

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

但是,一旦我保存帖子,它就会为images属性创建一个空数组。我做错了什么?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:2)

我刚刚做了类似的事情,在我的情况下附加到现有的集合中,请看这个问题/答案。它可能对你有所帮助:

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

你的问题是在Mongoose中你不能拥有嵌套对象,只能嵌套Schema。所以你需要做这样的事情(对于你想要的结构):

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

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

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