Express / Node.js - 如何在一个模型中保存对象数组

时间:2011-09-29 15:32:23

标签: mongodb node.js express mongoose

  

可能重复:
  Mongoose - Form to save model with embedded documents

我有一个简单的Mongoose模式,其中BlogPosts和Feeds嵌入在这些BlogPosts中。因此每个BlogPost都可以有多个Feed对象。现在我的HTML表单允许我在创建BlogPost时正确保存一个“Feed”,但我希望能够添加多个Feeds。我该如何更改我的HTML /控制器?非常感谢!

web.js

app.post('/blogpost/new', function(req, res){
    var post = new BlogPost(req.body.post)
    post.feeds.push(req.body.feed);
    post.save(function() {
        res.redirect('/blogposts');
    });
});

/博客帖子/新

<form method="post">
    <input type="text" name="blogpost[title]"/>
    <textarea name="feed[name]"></textarea>
    <textarea name="feed[key]"></textarea>
    <textarea name="feed[name]"></textarea>
    <textarea name="feed[key]"></textarea>
</form>

模式

var Feed = new Schema({
  name      : { type: String }
, key       : { type: String }
});

var BlogPost = new Schema({
  title     : { type: String, required: true, index: { unique: true } }
, feeds     : [Feed]
});

如何使这个表单在它创建的blogpost对象中存储两个“Feeds”?现在,它会在数据中保存一个Feed,其中包含两个名称值和两个键值。

非常感谢!

1 个答案:

答案 0 :(得分:1)

当你做这样的事情时:

<textarea name="feed[name]"></textarea>
<textarea name="feed[key]"></textarea>
<textarea name="feed[name]"></textarea>
<textarea name="feed[key]"></textarea>

您基本上是在说“我需要一个文本框,用于提供Feed的名称,Feed的密钥,Feed的名称,Feed的密钥,这显然是不正确的。如果您执行了feed[0][name] ... feed[1][name],那就说”我需要第一个Feed的文本框...我需要第二个Feed的文本框“

由于你打破了父和子,而不是将它们作为子对象处理,你需要将每个都推入blogPost.feeds并保存。

请小心使用这种方法,尤其是在编辑时,因为您只是在现有的Feed数组的顶部添加新对象。