2012-11-16 9 views
5

Tôi có một Node + Express dự án chạy, Tôi đang xây dựng một hệ thống blog cơ bản với Schema và Mô hình sauNode + Express Mongoose Sub Bộ sưu tập tài liệu Chèn

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

Tôi chấp nhận một yêu cầu bài qua đoạn mã sau và cập nhật Tiêu đề, Nội dung và Tác giả từ nó

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('/'); 
     } 
    }) 
}) 

Câu hỏi tôi có là, làm cách nào để thêm Nhận xét vào lược đồ bằng cách sử dụng coda mà tôi đã phát triển?

req.body.post đầu ra

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

Đó là rõ ràng là có thể chấp nhận cho Mongoose, nhưng để thêm ý kiến ​​như thế nào tôi sẽ đi về điều này?

Cảm ơn !!

Trả lời

12

Bạn có thể sử dụng đoạn mã sau:

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

đoạn này chỉ đơn giản là cố gắng tìm một bài Blog, nếu nó thành công thì $push bình luận mới, nếu không, thêm một bài đăng blog với một lời nhận xét ban đầu. Vì vậy, mã cuối cùng của bạn sẽ trông giống như sau:

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' là gì? – chovy

+3

nếu thuộc tính 'upsert' là' true', thì mongo đầu tiên cố gắng tìm tài liệu với tiêu chí 'tiêu đề: req.body.post.title' phù hợp. Nếu vậy, chỉ cần cập nhật tài liệu bằng '{$ push ...}'. Nếu không, mongo tạo một tài liệu mới, chèn nó và $ đẩy init nhận xét đầu tiên. thông tin khác: http://docs.mongodb.org/manual/reference/command/findAndModify/ –

+0

Thực ra tôi nghĩ rằng upsert sẽ tìm kiếm một ** Bài đăng ** có tiêu đề đó và nếu nó không tồn tại, hãy tạo Bài đăng không phải là bình luận – mrBorna