Node + Express Mongoose Sub Collection文档插入

时间:2012-11-16 08:00:31

标签: node.js mongodb express mongoose

我正在运行Node + Express项目,我正在使用以下架构和模型构建基本博客系统

var Post = mongoose.Schema({
    title: String,
    body: String,
    author: String,
    dateCreated: {type: Date, default: Date.now },
    comments: [{author: String, body: String, date: Date}]
});
var Post = db.model('Post', Post);

我通过以下代码接受邮寄请求,并从中更新标题,正文和作者

app.post('/addpost', function(req,res){
    console.log(req.body.post);
    var post = new Post(req.body.post);
    post.save(function(err){
        if(!err){
            res.redirect('/');
        }else{
            res.redirect('/');
        }
    })
})

我的问题是,如何使用我已经开发的coda将注释添加到模式中?

req.body.post输出

{ title: 'Hello World', body: 'This is a body', author: 'Bioshox' }

对于Mongoose来说,这显然是可以接受的,但是为了添加评论,我将如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:11)

您可以使用以下代码段:

var comment = {
    author: req.body.post.author , 
    body: req.body.post.body, 
    date: new Date()
};

Post.findOneAndUpdate(
  { title: req.body.post.title },
  { $push: { comments: comment }},
  { safe: true, upsert: true },
  function(err, blogModels) {
    // Handle err
  });

此代码段只是尝试查找Blog帖子,如果成功,则$push新评论,否则,添加带有初始评论的博客帖子。因此,您的最终代码应如下所示:

app.post('/addpost', function(req,res) {
    var comment = {
        author: req.body.post.author , 
        body: req.body.post.body, 
        date: new Date()
    };

    Post.findOneAndUpdate(
      { title: req.body.post.title },
      { $push: { comments: comment }},
      { safe: true, upsert: true },
      function(err, blogModels) {
        // Handle err
        });
});