查找特定节点的所有子节点,直到叶节点

时间:2017-04-25 01:44:48

标签: graph neo4j cypher graph-databases

我是Neo4j的新手并试图找到一种方法来获取节点的所有子节点。这是我的图表模型: Graph Model

如您所见,根节点是 SecurityGroup 节点,其下可能包含 SecurityGroup 节点或其下的用户节点。我需要找到根 SecurityGroup 节点的所有子节点(User和SecurityGroups),直到不再有嵌套为止。

2 个答案:

答案 0 :(得分:1)

以下是如何获取SecurityGroup属性值id的{​​{1}}节点的所有后代节点(根据图模型))的示例。

123

您可能希望在MATCH (sg:SecurityGroup)<-[*]-(d) WHERE sg.id = 123 RETURN d; 上创建索引(或唯一性约束)以有效地启动查询(而不是扫描所有:SecurityGroup(id)个节点)。

答案 1 :(得分:0)

  

我需要找到所有子节点(User和SecurityGroups)   根安全组节点,直到没有嵌套为止。

如果您想要仅来自ROOT节点的子节点,您需要在查询中指定此条件,为根节点提供类似ID的属性或特定标签(例如:RootNode,: Root等。)。

使用neo4j生成的ID属性不是一个好主意,因为它can change

在根节点中使用:Root标签,您可以执行以下操作:

MATCH (:Root)<-[:BELONGS_TO*]-(c)
RETURN c

最好通过语义问题在“[”和“]”中指定关系名称并提高性能。

可选择:您可以安装和使用GraphAware Neo4j UUID的根标签和ID属性,为您图表中的每个节点创建和管理通用唯一标识符。