使用 FeathersJS 建立 Deep-Nested Parent-Child 关系
Doing Deep-Nested Parent-Child Relationships using FeathersJS
我想知道建立深层嵌套 parent child 关系的最佳方法是使用 Feathers 的 recommended Association Method?
如果我的条目是:
[
{"name": "Grandpa", "id": 1, "parent": null},
{"name": "Mom", "id":2, "parent": 1},
{"name": "Baby", "id": 3, "parent": 2}
]
然后如果我想找到树的顶部 parent,我将执行递归获取直到到达树的顶部:
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 would do, but it is not under the "Recommended" approach to doing associations. I also don't see any examples of more than 3 levels in the guide, except in maybe the batch-loaders,
这看起来比我们在这里需要的要复杂一些。使用 Feathers 遍历祖先树的 "recommended" 方法是什么?
反过来说,如果我有爷爷,我怎么找宝贝?
我的条目是否应该包含一个 "children" 数组,当 child 与它们一起作为 parent 添加时填充?或者是否有更好的方法从 parent 树的顶部到底部?
归根结底,Feathers 不是 ORM,因此处理关联在很大程度上取决于您选择的数据库和 ORM,这与其他框架的处理方式大同小异比如 Express 或 KoaJS。这意味着更大的灵活性,但也没有真正做到这一点的真正方法,链接的常见问题解答条目试图尽可能好地涵盖不同的选项。
fastJoin
确实支持嵌套关联,但如果您使用 SQL 数据库,ORM 可以处理优化查询(Sequelize 也支持嵌套包含),则速度可能会变慢。但它可以比 Mongoose $populate
更快。 运行 一些实验,看看哪个效果最好。对于 parent/child 关系,需要注意的一件事是循环依赖,因此您想使用可以处理该问题的东西。
我想知道建立深层嵌套 parent child 关系的最佳方法是使用 Feathers 的 recommended Association Method?
如果我的条目是:
[
{"name": "Grandpa", "id": 1, "parent": null},
{"name": "Mom", "id":2, "parent": 1},
{"name": "Baby", "id": 3, "parent": 2}
]
然后如果我想找到树的顶部 parent,我将执行递归获取直到到达树的顶部:
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 would do, but it is not under the "Recommended" approach to doing associations. I also don't see any examples of more than 3 levels in the guide, except in maybe the batch-loaders, 这看起来比我们在这里需要的要复杂一些。使用 Feathers 遍历祖先树的 "recommended" 方法是什么? 反过来说,如果我有爷爷,我怎么找宝贝? 我的条目是否应该包含一个 "children" 数组,当 child 与它们一起作为 parent 添加时填充?或者是否有更好的方法从 parent 树的顶部到底部?
归根结底,Feathers 不是 ORM,因此处理关联在很大程度上取决于您选择的数据库和 ORM,这与其他框架的处理方式大同小异比如 Express 或 KoaJS。这意味着更大的灵活性,但也没有真正做到这一点的真正方法,链接的常见问题解答条目试图尽可能好地涵盖不同的选项。
fastJoin
确实支持嵌套关联,但如果您使用 SQL 数据库,ORM 可以处理优化查询(Sequelize 也支持嵌套包含),则速度可能会变慢。但它可以比 Mongoose $populate
更快。 运行 一些实验,看看哪个效果最好。对于 parent/child 关系,需要注意的一件事是循环依赖,因此您想使用可以处理该问题的东西。