Neo4j 使用cypher获取非重复子路径
我想获得所有到Child的唯一路径,而不将子路径作为集合的一部分 假设我的图表看起来像Neo4j 使用cypher获取非重复子路径,neo4j,cypher,Neo4j,Cypher,我想获得所有到Child的唯一路径,而不将子路径作为集合的一部分 假设我的图表看起来像 (A :GrandParent)-[RELATED_TO]->(B :Parent)-[RELATED_TO]->(C :Child) (X :GrandParent)-[RELATED_TO]->(Y :Child) (L :Child) 询问 MATCH path=(n)-[RELATED_TO*0..3]->(:Child) WHERE n:GrandParent OR
(A :GrandParent)-[RELATED_TO]->(B :Parent)-[RELATED_TO]->(C :Child)
(X :GrandParent)-[RELATED_TO]->(Y :Child)
(L :Child)
询问
MATCH path=(n)-[RELATED_TO*0..3]->(:Child)
WHERE n:GrandParent OR n:Parent
RETURN nodes(path)
会回来吗
A->B->C
B->C
C
X->Y
Y
有没有办法确保
不会返回,因为它已经是B->C
路径的一部分a->B->C
不会返回,因为它已经包含在C
路径中A->B->C
返回,因为它尚未覆盖L
。在您的数据集中,将产生A、X和L,这也是我们要进行的遍历
给出一些示例数据:
MERGE (A: GrandParent { name: 'A' })
MERGE (B: Parent { name: 'B' })
MERGE (C: Child { name: 'C' })
MERGE (X: Grandparent { name: 'X' })
MERGE (Y: Child { name: 'Y' })
MERGE (L: Child { name: 'L' })
MERGE (A)-[:RELATED_TO]->(B)
MERGE (B)-[:RELATED_TO]->(C)
MERGE (X)-[:RELATED_TO]->(Y)
以下查询将删除以具有传入的相关\u TO
关系的节点开始的路径:
MATCH path=(p)-[RELATED_TO*0..]->(:Child)
WHERE NOT (()-[:RELATED_TO]->(p))
RETURN nodes(path)
产生您描述的结果:
╒════════════════════════════════════════╕
│"nodes(path)" │
╞════════════════════════════════════════╡
│[{"name":"A"},{"name":"B"},{"name":"C"}]│
├────────────────────────────────────────┤
│[{"name":"X"},{"name":"Y"}] │
├────────────────────────────────────────┤
│[{"name":"L"}] │
└────────────────────────────────────────┘
虽然还不清楚如果一个节点有多个子节点,会发生什么情况。嘿,Pablissimo,谢谢你的回复。这确实得到了正确的图表,我同意我应该更好地表述这个问题。我当时很匆忙,忘记了问题中的一个重要方面,那就是,即使是根节点
节点也可能有其他与它相关的节点,具有相同的[:related\u to]
relationship是否也有办法处理这个问题?