2012-11-16 7 views
5

mam Node + ekspresowe uruchomiony projekt, buduję podstawowy system blogowania z poniższego schematu i modeliNode + ekspresowe Mongoose Sub Collection Dokument Insert

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

Akceptuję żądania POST za pomocą następującego kodu i zaktualizować tytuł, treść i autor z niego

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

mam pytanie jest, w jaki sposób mogę dodać komentarze do schematu z wykorzystaniem kodzie już opracowany?

req.body.post wyjścia

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

co jest oczywiście dopuszczalne Mangusta, ale aby dodać komentarz jak pójdę na ten temat?

Dzięki!

Odpowiedz

12

Można użyć następujący fragment kodu:

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

ten fragment po prostu spróbować znaleźć Blog post, jeśli sukces następnie $push nowy komentarz, w przeciwnym razie, dodaje blogu ze wstępnym komentarzem. Twój ostateczny kod powinien wyglądać tak:

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

co to jest "upsert"? – chovy

+3

jeśli właściwość 'upsert' ma wartość' true', to najpierw spróbuj znaleźć dokument z pasującymi kryteriami 'title: req.body.post.title'. Jeśli tak, po prostu zaktualizuj dokument za pomocą '{$ push ...}'. W przeciwnym razie mongo tworzy nowy dokument, wstawi go i $ wypuści pierwszy skrypt komentarza. więcej informacji: http://docs.mongodb.org/manual/reference/command/findAndModify/ –

+0

Właściwie uważam, że upsert szuka znaleźć ** post ** z tym tytułem, a jeśli nie istnieje, tworzy post nie komentarz – mrBorna