Neo4j 获得全部 parents 和盛大 parents

Neo4j get all parents and grand parents

我有一个 unknown-level 树层次结构存储在 Neo4j 图形数据库中。 如何检索给定节点的所有 parents 和 grand parents。 因此在下面的示例中,节点“a”有 parent 和 grand parent“c”、“e”和“b”

CREATE (a {id:1})
CREATE (b {id:2})
CREATE (c {id:3})
CREATE (d {id:4})
CREATE (e {id:5})

MATCH (a), (c) WHERE a.id = 1 AND c.id = 3 CREATE (a) -[r:PARENT]-> (c)
MATCH (c), (e) WHERE c.id = 3 AND e.id = 5 CREATE (c) -[r:PARENT]-> (e)
MATCH (a), (b) WHERE a.id = 1 AND b.id = 2 CREATE (a) -[r:PARENT]-> (b)

如果您需要 parents 和 grandparents 在一个列表中,那么您可以使用:

MATCH (a) WHERE a.id = 1  
WITH a 
OPTIONAL MATCH (a)-[:PARENT*1..2]->(pg)  
RETURN a, collect(pg) as parents

如果您需要一个列表中的 parents 和另一个列表中的 grandparents:

MATCH (a) WHERE a.id = 1   
WITH a  
OPTIONAL MATCH (a)-[:PARENT]->(p)   
OPTIONAL MATCH (p)-[:PARENT]->(gp)   
RETURN a, collect(p) as parents, collect(gp) as grandparents

WITH用于将匹配到的节点传递给后面的sub-queries.

使用

OPTIONAL MATCH 以便查询 returns 结果,即使 parents 或 grandparents 节点对任何节点都不可用。

建议: 考虑为节点使用标签,例如人