找到特定节点的所有子节点,直到叶节点
我是Neo4j的新手,试图找出获取节点的所有子节点的方法。这里是我的图模型: Graph Model找到特定节点的所有子节点,直到叶节点
正如你可以看到,根节点是可以具有在它之下SecurityGroup节点或用户下,它的节点的SecurityGroup节点。我需要查找根节点SecurityGroup节点的所有子节点(包括User和SecurityGroups),直到没有更多的嵌套为止。
我需要找到所有的子节点(包括用户和SecurityGroups)的 根SecurityGroup节点,直到没有更多的嵌套。
如果你想只从根节点的子节点您需要在您的查询提供一个ID类似财产或特定标签根节点指定此条件(如:根节点,:根,等等。)。
是不是一个好主意,使用由Neo4j的生成的ID属性,因为它can change。
在根节点使用:Root
标签,你可以这样做:
MATCH (:Root)<-[:BELONGS_TO*]-(c)
RETURN c
是指定内部关系名是个好主意“[”和“]”语义学的问题,并提高性能。
或者到:根标签和ID属性,你可以安装并使用GraphAware Neo4j UUID创建和管理通用唯一标识符在图形中的每个节点。
感谢您的回复!我打算在图中添加更多的节点类型,因此图中将存在多种类型的关系。在这种情况下是否可以使用多个关系名称? – IronMan
你好!是的,您可以匹配[通过多种关系类型](http://neo4j.com/docs/developer-manual/current/cypher/clauses/match/#_match_by_multiple_relationship_types),例如: MATCH(:Root)
下面是如何获取SecurityGroup
节点的所有后代节点(根据您的图形模型))的一个示例,其中id
属性值为123
。
MATCH (sg:SecurityGroup)<-[*]-(d)
WHERE sg.id = 123
RETURN d;
您可能希望创建一个:SecurityGroup(id)
指数(或唯一约束),以有效地发起查询(而不是扫描所有SecurityGroup
节点)。
Hi @ ironMan。如果有任何答案已解决您的问题,请点击复选标记考虑[接受](https://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。 –