我的收藏品有以下结构
{
_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传递给该函数,它必须删除所有它的孩子,这不是删除所有文档中此函数的错误。
还有其他方法可以写这个功能吗?
答案 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()