如何获取文档然后使用Mongoose将输入保存到参考文档

时间:2017-02-01 18:27:12

标签: node.js mongodb 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
      });

    });

1 个答案:

答案 0 :(得分:0)

尝试重写您的帖子功能,以便您可以先创建评论,将新评论ID作为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; });
});