2012-11-16 41 views
5

我有一個節點+快遞項目的運行,我建立一個基本的博客系統具有以下架構和模型節點+快遞貓鼬子集文檔中插入

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

我接受通過下面的代碼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' } 

這顯然是可以接受的貓鼬,但爲了添加註釋,我將如何去這件事嗎?

謝謝!

回答

12

您可以使用下面的代碼片段:

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 
     }); 
}); 
+0

'upsert'是什麼? – chovy

+3

如果'upsert'屬性是'true',那麼mongo首先嚐試找到匹配'title:req.body.post.title'標準的文檔。如果是這樣,只需使用'{$ push ...}'更新文檔即可。否則,mongo創建一個新文檔,插入它並$推入第一個註釋init。 更多信息:http://docs.mongodb.org/manual/reference/command/findAndModify/ –

+0

其實我認爲upsert看起來找到一個**職位**與該標題,如果它不存在創建郵政不是評論 – mrBorna