如何在没有在Mongoose中获取父项的情况下对子文档执行操作?

时间:2013-01-19 07:12:37

标签: javascript node.js mongodb mongoose

现在,如果我想删除一个子文档,我会这样做:

Post.findById(post_id).exec(function(err, post) {
  post.comments.remove({'_id': comment_id});
  post.save(function(err) {
    res.end("Hooray!");
  });
});

这对我来说似乎不是最优的,因为每次删除评论时,整个帖子都会从DB中获取,并且它附带了很多东西。那么,是否可以在不获取父文档的情况下修改子文档?

1 个答案:

答案 0 :(得分:1)

根据documentation,如果要在不提取文档的情况下更新文档,则必须手动执行更新请求。在我的情况下,它将产生以下代码:

Post.update({'_id': post_id}, {$pull: {'comments': {'_id': comment_id}}}).exec(function(err){
  console.log('Hooray!');
});

这是一个很好的可行解决方案,但执行直接请求意味着验证不会像版本控制那样有效。