2017-02-01 3 views
1

Я застреваю в данный момент, когда пытаюсь выяснить, как я могу публиковать новые комментарии в схеме книг.Как я могу получить документ, а затем сохранить ввод в справочный документ с помощью Mongoose

Схема моих книг ссылается на комментарии, и у меня уже есть маршрут для добавления новой книги, но мне нужен пост-маршрут, чтобы добавить новый комментарий к определенной книге по ID. Все примеры, которые я нахожу здесь, это создание новой схемы для книги, но мне нужно получить правильный документ книги, уже созданный его идентификатором, а затем сохранить новый комментарий.

Это моя схема для книги и комментария.

var BookSchema = new Schema({ 
      title : { type: String, required: true }, 
      commentcount : Number, 
      comments : [{ type: Schema.Types.ObjectId, ref: 'Comment' }] 

     mongoose.model('Book', BookSchema); 

     var CommentSchema = new Schema({ 
      book : [{ type: Number, ref: 'Book' }], 
      comment : { type: String, required: true }, 
     }); 

     mongoose.model('Comment', CommentSchema); 

Это мой почтовый маршрут, где я пытаюсь сохранить новый комментарий.

.post(function(req, res){ 
      var bookid = req.params.id; 
      var comment = req.body.comment; 

     var newcomment = new Comment({name: comment, book: bookid}); 

     Book.findById(bookid, function(err, doc){ 

     doc.comments.push(newcomment); 
     doc.commentcount += 1; 
      console.log(doc);  
     doc.save(function(err) { 
     // todo 
     }); 

    }); 

ответ

0

Попытка переписывать пост функцию, так что вы можете создать свой комментарий первым, нажмите новый комментарий идентификатор в качестве обновления на Book модели следующим образом:

.post(function(req, res){ 
    var bookid = req.params.id; 
    var newComment = new Comment({ 
     name: req.body.comment, 
     book: bookid 
    }); 

    newComment.save().then(function(comment){ 
     Book.findByIdAndUpdate(
      bookid, 
      { 
       "$push": { "comments": comment._id }, 
       "$inc": { "commentcount": 1 } 
      }, 
      { "new": true, "upsert": true } 
     ).exec(); 
    }) 
    .then(function(book) { res.send(book); }) 
    .catch(function(err) { throw err; }); 
}); 
+0

благодаря этим работали –

Смежные вопросы