【发布时间】:2017-07-22 12:07:49
【问题描述】:
目前正在分析两个节点之间的不同路径。为此,我需要某种方式从 Neo4J 返回的路径中唯一标识路径。
测试用例:
#MATCH (n:City) DETACH DELETE n;
CREATE (n:City { name: 'Rome' });
CREATE (n:City { name: 'London' });
CREATE (n:City { name: 'Berlin' });
CREATE (n:City { name: 'Madrid' });
MATCH (n:City),(m:City)
WHERE n.name = 'London' AND m.name = 'Madrid'
CREATE (n)-[r:Connected]->(m) RETURN r;
MATCH (n:City),(m:City)
WHERE n.name = 'Madrid' AND m.name = 'Berlin'
CREATE (n)-[r:Connected]->(m) RETURN r;
MATCH (n:City),(m:City)
WHERE n.name = 'Berlin' AND m.name = 'Rome'
CREATE (n)-[r:Connected]->(m) RETURN r;
MATCH (n:City),(m:City)
WHERE n.name = 'London' AND m.name = 'Berlin'
CREATE (n)-[r:Connected]->(m) RETURN r;
MATCH (n:City),(m:City) WHERE n.name = 'London' AND m.name = 'Rome'
CREATE (n)-[r:Express]->(m) RETURN r;
下面的查询工作正常
MATCH (n:City),(m:City)
WHERE n.name = 'London' AND m.name = 'Rome'
with n,m
match p= (n)-[*1..]->(m)
return p;
+---------------------------------------------------------------------------------------------------------------------------------------------+
| p |
+---------------------------------------------------------------------------------------------------------------------------------------------+
| (:City {name: "London"})-[:Connected]->(:City {name: "Madrid"})<-[:Connected]-(:City {name: "Berlin"})-[:Connected]->(:City {name: "Rome"}) |
| (:City {name: "London"})-[:Connected]->(:City {name: "Berlin"})<-[:Connected]-(:City {name: "Rome"}) |
| (:City {name: "London"})-[:Express]->(:City {name: "Rome"}) |
+---------------------------------------------------------------------------------------------------------------------------------------------+
为了获得访问过的节点,我使用了查询:
MATCH (n:City),(m:City)
WHERE n.name = 'London' AND m.name = 'Rome'
with n,m
match p= (n)-[*1..]->(m)
unwind nodes(p) as n1 return n1;
+--------------------------+
| n1 |
+--------------------------+
| (:City {name: "London"}) |
| (:City {name: "Madrid"}) |
| (:City {name: "Berlin"}) |
| (:City {name: "Rome"}) |
| (:City {name: "London"}) |
| (:City {name: "Berlin"}) |
| (:City {name: "Rome"}) |
| (:City {name: "London"}) |
| (:City {name: "Rome"}) |
+--------------------------+
但是,我需要一个属性来确定获取节点的路径,比如
+--------------------------+---------+
| n1 | pathid |
+--------------------------+---------+
| (:City {name: "London"}) | 1 |
| (:City {name: "Madrid"}) | 1 |
| (:City {name: "Berlin"}) | 1 |
| (:City {name: "Rome"}) | 1 |
| (:City {name: "London"}) | 2 |
| (:City {name: "Berlin"}) | 2 |
| (:City {name: "Rome"}) | 2 |
| (:City {name: "London"}) | 3 |
| (:City {name: "Rome"}) | 3 |
+--------------------------+---------+
我尝试使用密码 foreach 和 reduce 运算符但没有成功。您能否提供一些关于如何枚举路径的指示?
谢谢 肯尼斯
【问题讨论】: