使用FeathersJS进行深层嵌套的亲子关系

时间:2019-05-29 12:44:07

标签: javascript node.js database feathersjs

我想知道建立深层嵌套父子关系的最佳方法是使用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遍历祖先树的“推荐”方法是什么? 相反,如果我有爷爷,我将如何找到宝贝? 我的条目中是否应包含一个“孩子”数组,当将一个孩子作为父母添加时,该数组会填充?还是有更好的方法从父树的顶部移到底部?

1 个答案:

答案 0 :(得分:0)

归结为Feathers不是ORM,因此处理关联在很大程度上取决于数据库,而您选择的ORM与使用Express或KoaJS等其他框架的方式几乎相同。这不仅意味着更大的灵活性,而且还没有真正做到这一点的真正方法,而FAQ链接试图覆盖尽可能多的不同选项。

fastJoin确实支持嵌套关联,但是如果您使用SQL数据库(ORM可以处理优化查询)(Sequelize也支持嵌套包含),则速度可能会慢一些。但是它可能比猫鼬$populate更快。进行一些实验,看看哪个效果最好。对于父子关系,需要注意的一件事是循环依赖关系,因此您想使用可以处理这种关系的东西。