如果医生有孩子去除所有孩子,如果孩子有更多孩子去除这些孩子

时间:2015-04-11 21:13:15

标签: javascript mongodb meteor

我的收藏品有以下结构

{
 _id:1,
 parent_id:0
}
{
 _id:2,
 parent_id:1
}
{
 _id:3,
 parent_id:1
}
{
 _id:4,
 parent_id:3
}

a> a1> a1-1,a1-2,a1-3> A11

一位父母有很多孩子,孩子可以有很多孩子的无限循环

但是当用户点击我想要删除所有孩子并且它也是孩子时

我尝试了以下功能

var deleteChildCards = function(id){
    var count=userCards.find({parent_id: id}).count();
    if(count > 0){
        userCards.find({parent_id: id}).forEach(function (card) {
            deleteChildCards(card._id);
        });
    }
    else{
        return userCards.remove({_id: id});
    }
}

如果我将id传递给该函数,它必须删除所有它的孩子,这不是删除所有文档中此函数的错误。

还有其他方法可以写这个功能吗?

2 个答案:

答案 0 :(得分:1)

在您的示例中,if-else的else部分永远不会运行。请尝试以下调整:

var deleteChildCards = function(id) {
  userCards.find({parent_id: id}).forEach(function(card) {
    deleteChildCards(card._id);
    userCards.remove(card._id);
  });
}

您可以完全消除此示例中的if-else,因为如果找不到userCards,forEach将不会迭代。

答案 1 :(得分:0)

根据我的理解,你错误地做了其他事。

尝试



var deleteChildCards = function(id){
    var count=userCards.find({parent_id: id}).count();
    if(count > 0){
        userCards.find({parent_id: id}).fetch().forEach(function (card) {
            deleteChildCards(card._id);
        });
    }
        userCards.remove({_id: id});
}




否则,它只会删除层次结构最低级别的卡片。 此外,如果你想做forEach

,你需要在find()之后执行.fetch()