create node:root set title = 'Root';
create node:child1 set title = 'Child 1';
create node:child2 set title = 'Child 2';
create node:child3 set title = 'Child 3';
create node:grandchild11 set title = 'GrandChild 1.1'
relate node:root -> is_parent -> node:child1;
relate node:root -> is_parent -> node:child2;
relate node:root -> is_parent -> node:child3;
relate node:child1 -> is_parent -> node:grandchild11;
现在我想递归地选择从根开始的子树(例如能够指定跳数)。
我尝试了这个查询,但不太明白如何使用这种语法来归档递归性。
select *,->is_parent->node as childen from node:root;
此查询返回子树,但仅返回下一级。
有没有办法指定跳数或递归执行图遍历以获得类似这样的结构。
{
"title": "root',
"children": [
"title": "child1",
"children": [
{
"title": "grandchild 1.1"
}
],
...other root children nodes
]
}
您可以通过简单的 JavaScript 函数来完成此操作,例如:
RETURN function() {
const elements = await surrealdb.query("SELECT *, (<-is_parent.in)[0] as parent FROM node");
const get_children = (elements) => {
return elements.map((element) => {
const children = attributes.filter((e) => e.parent?.id === element.id.id);
return {
...element,
children: get_children(children)
};
});
};
const top_level = attributes.filter((e) => e.parent == null);
return get_children(top_level)
};