如何删除mongoose中的子文档?

时间:2014-01-24 07:51:27

标签: node.js mongodb mongoose

我有一个集合,其中有许多文档,每个文档都有一个子文档数组

comment : {
  _id : ObjectId
  name : String,
  comments : [commentSchema]
}

commentSchema : {
  _id : ObjectId,
  commentType : String // can be either 'string' or 'image'
  commentData : String
}

现在我想从整个评论集合中删除“comments”路径中的所有子文档,这些子文档是commentType ='image'。

我做了以下

export.removeComments = function(next) {
    mongoose.model('comment').find({}, function(err,docs){
              if(err) return next(err);
              docs.forEach(function(doc, index){
                doc.comments.pull({ commentType : 'image'});

                //Following also not works
                /*  var comments = doc.comments;
                for(var i =0; i < comments.length; i++ ) {
                  if(comments[i].commentType == 'image')
                    doc.comments.remove(comments[i]._id);
                }*/

                if(index < docs.length - 1) doc.save();
                else doc.save(next);
              });
            });
};

但上面没有效果。

任何帮助??

1 个答案:

答案 0 :(得分:0)

以下对我有用:

刚刚添加了带有相应子文档ID的toString(),因为它是一个Object而不是一个字符串。并且可能删除子文档需要id的字符串。如果我错了,请纠正我。

mongoose.model('comment').find({}, function(err,docs){
              if(err) return next(err);
              docs.forEach(function(doc, index){

                for(var i =0; i < comments.length; i++ ) {
                  if(comments[i].commentType == 'image')
                    doc.comments.remove(comments[i]._id.toString());
                }

                if(index < docs.length - 1) doc.save();
                else doc.save(next);
              });
            });