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

时间:2018-01-12 12:38:31

标签: neo4j cypher graph-databases

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

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

我只想回复a -> b -> ca -> d但不回复a也不回复a -> b

修改

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

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

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

2 个答案:

答案 0 :(得分:3)

获取长度为4的所有路径,从根节点开始,以叶节点结束或长度为4:

/items/

答案 1 :(得分:2)

使用示例数据集重现:

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"}]                             │
└───────────────────────────────────────────────────────────┘