2016-12-10 94 views
0

我有樹stucture這樣的:遞歸刪除[快車&貓鼬]

[{ 
..., 
childCode: [ 
    ..., 
    childCode: [] 
] 
}, 
{..., 
childCode:[ 
] 
} 
] 

我想刪除所有子代碼...

我能做到這一點機智recusion:

在我的我的代碼:

removeChild(code.childCode); 

return res.json({ 
message: "Code deleted!" 
}); 

recusion功能:

function removeChild(code) { 
    if (code.length == 0) { 
     console.log("done"); 
    } else 
    { 
     code.forEach(function (code) { 
      setTimeout(function() { 

       code.remove(); 

       removeChild(code.childCode); 
      }, 100); 


     }); 
    } 
} 

這是正確的方法嗎?

+0

你是什麼樹的模式?它是「子參考」,「父參考」還是「物化路徑」? – willie17

+0

查看json strucutre ...每個孩子可以有一個父母 –

+0

JSON結構實際上並不反映該方案。例如,如果使用'materialized path',則可以在一個簡單查詢中創建並返回該JSON結構。因此,您只需要1個'Model.remove()'查詢。 – willie17

回答

0

假設你有一個像這樣的樹:

__A 
|_B 
| |_C 
| 
|_D 

這是你如何根據materialized path模式保存在數據庫中:

[ 
    { _id: 'A', path: 'A' }, 
    { _id: 'B', path: 'A/B' }, 
    { _id: 'C', path: 'A/B/C' }, 
    { _id: 'D', path: 'A/D' } 
] 

您可以查詢整棵樹如此:

Node 
    .find({ path: { $regex: /A/ } }) 
    .exec() 
    .then(...); 

注:查詢後,可以將其轉換成你的JSON結構像this


,並刪除整個樹是這樣的:

Node 
    .remove({ path: { $regex: /A/ } }) 
    .exec() 
    .then(...);