【问题标题】:Recursion delete [Express & Mongoose]递归删除 [Express & Mongoose]
【发布时间】:2016-12-13 15:24:52
【问题描述】:

我有这样的树结构:

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

我想删除所有子代码...

我能够做到这一点:

在我的代码中:

removeChild(code.childCode);

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

递归函数:

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

                code.remove();

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


        });
    }
}

这是正确的方法吗?

【问题讨论】:

  • 你的树模式是什么?是child referenceparent reference 还是materialized path
  • 查看json结构...每个孩子可以有一个父母
  • JSON 结构实际上并不反映方案。例如,如果您使用 materialized path,您可以在一个简单的查询中创建并返回该 JSON 结构。因此,您只需要 1 个Model.remove() 查询。
  • 你能分享一下例子吗?

标签: node.js mongodb express mongoose


【解决方案1】:

假设你有一棵这样的树:

__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(...);

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 2017-05-16
    • 1970-01-01
    • 2017-08-04
    • 2011-02-08
    • 2017-05-12
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多