CYPHER:查询下一跳节点

时间:2014-11-18 20:23:52

标签: neo4j cypher acl

晚上好,

作为初学者,我努力将我的关系数据库知识转移到图形数据库及其查询。让我们假设我有一个包含以下节点的图表:

  • PERSON节点
  • 两个组图,如MAIN GROUP A和MAIN GROUP B
  • MAIN GROUP A有另一个节点,如SUB GROUP 1,它有另一个节点DETAIL GROUP Z
  • MAIN GROUP B有另一个节点,如SUB GROUP 2

用户节点与SUB GROUP 2和DETAIL GROUP Z相关。

使用查询

MATCH (user:PERSON {name: "user"})-[relation:IS_MEMBER_OF*0..]->(team:GROUP)
RETURN team

我直接找到用户所属的群组。

希望知道用户也连接到的组,因为PERSON也是SUB GROUP 1,MAIN GROUP A和MAIN GROUP B的成员。

有人能把我推向正确的方向吗?非常感谢。

Balael

1 个答案:

答案 0 :(得分:2)

假设您有一个HAS_SUBGROUP关系将父组链接到每个子组,此查询应该返回用户是每个团队的直接成员,并为每个团队返回不同的祖先团队集合。

MATCH (:PERSON {name: "user"})-[:IS_MEMBER_OF*]->(team:GROUP)
OPTIONAL MATCH (team)<-[:HAS_SUBGROUP*]-(ancestor_team)
RETURN team, COLLECT(DISTINCT ancestor_team);