neo4j:如何从结果中消除子路径

neo4j: how to eliminate subpaths from the result

我想 return 从节点 a 开始的大小为 0..4 的路径。但我只想 return 最长的路径(跳过子路径)。对于图表:

a -> b - > c
|
| -> d

我只想 return a -> b -> ca -> d 而不是 aa -> b

编辑

这意味着如果有一条路径长于 4,我仍然需要大小为 0..4 的最长路径。所以:

a -> b -> c -> d -> e -> f

我想得到 a -> b -> c -> d -> e

使用您的示例数据集重现:

CREATE (a:Node {name:"A"})-[:RELATION]->(b:Node {name:"B"})-[:RELATION]->(c:Node {name:"C"}),
(a)-[:RELATION]->(d:Node {name:"D"})

您可以这样限制返回的路径WHERE

match path = (a)-[*0..4]->(b)
where not ()-->(a) and not (b)-->()
return path

输出将是:

╒═══════════════════════════════════════════════════════════╕
│"path"                                                     │
╞═══════════════════════════════════════════════════════════╡
│[{"name":"A"},{},{"name":"B"},{"name":"B"},{},{"name":"C"}]│
├───────────────────────────────────────────────────────────┤
│[{"name":"A"},{},{"name":"D"}]                             │
└───────────────────────────────────────────────────────────┘

获取从根节点开始到叶节点结束或长度为 4 的所有长度不超过 4 的路径:

MATCH path = (a)-[*0..4]->(b)
WHERE NOT ()-->(a) AND (LENGTH(path) = 4 OR NOT (b)-->())
RETURN path;