2017-02-01 2 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モデルの更新として新しいコメントIDをプッシュし、あなたのポストの機能を書き換えてみてください。これは働いていた

.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

おかげで –

関連する問題