在surrealdb中选择图时指定跳数(递归查询)

问题描述 投票:0回答:1

我正在尝试使用超现实数据库来实现树。我的树看起来像这样。

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
  ]
}
surrealdb
1个回答
0
投票

您可以通过简单的 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)
    };
© www.soinside.com 2019 - 2024. All rights reserved.