Neo4J - 如何在allShortestPaths中排除自引用节点?

时间:2018-05-07 06:48:53

标签: neo4j

我试图找到给定特定长度的所有最短路径。以下是我正在使用的查询:

match (n:Person{email:'sam@gmail.com'}),
(k:Person{email:'joseph@gmail.com'}),
paths=allShortestPaths((n)-[r:CONNECTED_TO*..2]->(k))
where length(paths)=2
with collect(paths) as path
unwind path as p
return nodes(p) as nodes,rels(p) as relations

问题是我在表单数据库中有自引用节点

(n:Person{email:'sam@gmail.com'})-[:CONNECTED_TO]->
(n:Person{email:'sam@gmail.com'})

我想在最短路径查询中排除这些路径。任何人都可以指导我朝着正确的方向前进。

1 个答案:

答案 0 :(得分:1)

您可以在最短路径调用后在WHERE子句中添加谓词以排除这些谓词:

match (n:Person{email:'sam@gmail.com'}),
(k:Person{email:'joseph@gmail.com'}),
path=allShortestPaths((n)-[:CONNECTED_TO*..2]->(k))
where length(path) = 2 and none(rel in relationships(path) where startNode(rel) = endNode(rel))
return nodes(path) as nodes, relationships(path) as relations