7

我有一个 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('/');
        }
    })
})

我的问题是,如何使用我已经开发的代码向模式添加注释?

req.body.post输出

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

这显然是 Mongoose 可以接受的,但是为了添加评论,我将如何处理呢?

谢谢!!

4

1 回答 1

13

您可以使用以下代码片段:

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
        });
});
于 2012-11-16T10:20:33.047 回答