现在,如果我想删除一个子文档,我会这样做:
Post.findById(post_id).exec(function(err, post) {
post.comments.remove({'_id': comment_id});
post.save(function(err) {
res.end("Hooray!");
});
});
这对我来说似乎不是最优的,因为每次删除评论时,整个帖子都会从DB中获取,并且它附带了很多东西。那么,是否可以在不获取父文档的情况下修改子文档?
答案 0 :(得分:1)
根据documentation,如果要在不提取文档的情况下更新文档,则必须手动执行更新请求。在我的情况下,它将产生以下代码:
Post.update({'_id': post_id}, {$pull: {'comments': {'_id': comment_id}}}).exec(function(err){
console.log('Hooray!');
});
这是一个很好的可行解决方案,但执行直接请求意味着验证不会像版本控制那样有效。