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 节点对任何节点都不可用。
建议:
考虑为节点使用标签,例如人
我有一个 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 节点对任何节点都不可用。
建议: 考虑为节点使用标签,例如人