说明
只是单纯的记录学习过程
官方地址~~~
还是推荐看 官方文档
使用前提
- 数据库为mongodb + node
- 需要树桩层次结构
优点
如果你想要这样的一个数据结构这个模块在适合不过了,超级方便。真的超级超级,而且提供其他接口,也是超级好。
缺点
客观一点没有!如果我们在决定使用这个模块的时候,就一定要想清楚到底适不适合,如果是因为我们自己的逻辑出了问题,真的不是它的缺点呀。
例子:我们这个项目上确实体现了一点,因为项目是OA多层级部门就很适合这个呀。但功能需求整个树状结构需要公司,我们为了方便就直接将公司的信息放到了部门表里。但这样导致后来获取公司数据过分依赖部门表,导致公司表完全没有发挥他但作用,最致命的是部门表是替代不了公司表的因为某些数据比如ID,这样导致我们确实乱了
常用方法
创建方法:超级简单,就是在创建数据的时候加一个parent字段
const stockholm = new LocationModel({name: 'stockholm', parent: sweden});
查询的api:
假设我们现在有以下树形结构
africa
europe
- norway
- sweden
-- stockholm
--- skansen
- 返回文档的祖先:getAncestors()
const ancestors = await stockholm.getAncestors({});
//返回数据: (Array) [europe, sweden]
- 返回文档的所有子级:getAllChildren()
const children = await sweden.getAllChildren({});
// 返回数据: (Array) [stockholm, skansen]
const children = await stockholm.getAllChildren({});
//返回数据: (Array) [skansen]
- 返回文档的直接子级:getImmediateChildren()
const children = await europe.getImmediateChildren({});
// 返回数据:(Array) [norway, sweden]
const children = await sweden.getImmediateChildren({});
// 返回数据:(Array) [stockholm]
- 超级好用的来了获取子级的树形结构: getChildrenTree()
europe.getChildrenTree()
/*--------返回数据-------------
[
{
'name': 'norway',
'children': []
},
{
'name': 'sweden',
'children': [
{
'name': 'sthlm',
'children': [
{
'name': 'skansen',
'children': []
}
],
}
]
}
]
*/
结束
最后愿我们持独立思考,不卑不亢不怂,长成自己想要的样子~