我想知道建立深层嵌套父子关系的最佳方法是使用Feathers的recommended Association Method?
如果我的输入是:
[
{"name": "Grandpa", "id": 1, "parent": null},
{"name": "Mom", "id":2, "parent": 1},
{"name": "Baby", "id": 3, "parent": 2}
]
然后,如果我想找到树的顶级父级,我将进行递归获取,直到到达树的顶部:
const family = app.service('/family')
function get_ancestors(childId, parents){
const child = family.get(childId)
if(child.parent){
parents.push(child.parent)
return get_ancestors(child.parent, parents)
} else {
return parents
}
}
但是对于我来说,这似乎很笨拙,而且扩展性不强。有没有更好的办法? 这似乎fastJoin可以完成,但是它不在“推荐”方法下进行关联。我也看不到指南中超过3个级别的任何示例,除非是batch-loaders, 这看起来比我们这里需要的复杂。使用Feathers遍历祖先树的“推荐”方法是什么? 相反,如果我有爷爷,我将如何找到宝贝? 我的条目中是否应包含一个“孩子”数组,当将一个孩子作为父母添加时,该数组会填充?还是有更好的方法从父树的顶部移到底部?
答案 0 :(得分:0)
归结为Feathers不是ORM,因此处理关联在很大程度上取决于数据库,而您选择的ORM与使用Express或KoaJS等其他框架的方式几乎相同。这不仅意味着更大的灵活性,而且还没有真正做到这一点的真正方法,而FAQ链接试图覆盖尽可能多的不同选项。
fastJoin
确实支持嵌套关联,但是如果您使用SQL数据库(ORM可以处理优化查询)(Sequelize也支持嵌套包含),则速度可能会慢一些。但是它可能比猫鼬$populate
更快。进行一些实验,看看哪个效果最好。对于父子关系,需要注意的一件事是循环依赖关系,因此您想使用可以处理这种关系的东西。