我有一个集合,其中有许多文档,每个文档都有一个子文档数组
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);
});
});
};
但上面没有效果。
任何帮助??
答案 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);
});
});