我现在陷入困境,因为我试图找出如何将新评论发布到图书架构中。
我的图书模式引用了评论,我已经有了一个帖子路线来添加一本新书,但我需要一个帖子路线来通过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 :(得分: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; });
});