Express Mongoose:从其DBRef数组中删除架构和所有项

Express Mongoose:从其DBRef数组中删除架构和所有项,express,mongoose,Express,Mongoose,我是NodeJS和Mongo的新手,我想知道是否有人能帮我解决这个问题。我想删除一个模式,它是一篇博客文章,其中包含一个引用“注释”模式的数组 以下是模型: var blogSchema = new Schema({ title: String, author: String, body: String, likes: { type: Number, default: 0 }, comments: [{ type: Schema.Types.ObjectI

我是NodeJS和Mongo的新手,我想知道是否有人能帮我解决这个问题。我想删除一个模式,它是一篇博客文章,其中包含一个引用“注释”模式的数组

以下是模型:

var blogSchema = new Schema({
    title: String,
    author: String,
    body: String,
    likes: { type: Number, default: 0 },
    comments: [{ type: Schema.Types.ObjectId, ref: 'Comment' }],
    date: { type: Date, default: Date.now }
});

var commentSchema = new Schema({
    body: String,
    author: String,
    post: {type: Schema.Types.ObjectId, ref: 'Post'}
});
以下是我如何找到我的博客帖子:

router.param('post', function(req, res, next, id){
    var query = Blog.findById(id);

    query.exec(function (err, blogPost){
        if(err){
            return next(err);
        }
        if(!blogPost){
            return next(new Error("Can't find post"));
        }
        req.blogPost = blogPost;
        return next();
    });
});
以下是我试图找出的代码:

router.delete('/posts/:post/remove', function(req, res, next){
    var postToRemove = req.blogPost;
    postToRemove.remove(function(req, res, next){
    //... what should I do in here?
    }
}

谢谢你帮助大家

假设post query参数是要删除的帖子的标题,您可以尝试以下

router.delete('/posts/:post/remove', function(req, res, next){
    var postToRemove = req.params.post;
    Blog.remove({title: postToRemove}, function(req, res, next){
        if (err) return next(err);
        res.json(post);
    }
}
或者,您可以使用
findOneAndRemove()
方法:

router.delete('/posts/:post/remove', function(req, res, next){
    var postToRemove = req.params.post;
    Blog.findOneAndRemove({title: postToRemove}, function(req, res, next){
        if (err) return next(err);
        res.json(post);
    }
}
或者,如果您事先知道id,您可以使用以下
findbyiandremove()
方法:

router.delete('/posts/:id/remove', function(req, res, next){
    Blog.findByIdAndRemove(req.params.id, req.body, function (err, post) {
        if (err) return next(err);
        res.json(post);
    });
}

谢谢你的回复!post查询参数实际上返回一个通过其id找到的博客模式。此外,上面显示的方法是否也会删除所有注释?comments.remove().exec(function(err){});删除所有