【发布时间】:2017-01-22 20:18:27
【问题描述】:
例如拥有这些数据:
CREATE
(p1:Person {name:"p1"}),
(p2:Person {name:"p2"}),
(p3:Person {name:"p3"}),
(p4:Person {name:"p4"}),
(p5:Person {name:"p5"}),
(p1)-[:KNOWS]->(p2),
(p1)-[:KNOWS]->(p3),
(p1)-[:KNOWS]->(p4),
(p5)-[:KNOWS]->(p3),
(p5)-[:KNOWS]->(p4)
我想得到 p1 和 p5 之间的共同关系:
MATCH (p1:Person {name:"p1"})-[r1:KNOWS]-(p:Person)-[r2:KNOWS]-(p5:Person {name:"p5"})
RETURN p, p1, p5
这将返回 4 个节点:p1、p3、p4、p5 和 4 条边。
我的目标是获得具有方向的边缘作为表格行:从和到。所以这似乎有效:
MATCH (p1:Person {name:"p1"})-[r1:KNOWS]-(p:Person)-[r2:KNOWS]-(p5:Person {name:"p5"})
RETURN startNode(r1).name AS from, endNode(r1).name AS to
UNION
MATCH (p1:Person {name:"p1"})-[r1:KNOWS]-(p:Person)-[r2:KNOWS]-(p5:Person {name:"p5"})
RETURN startNode(r2).name AS from, endNode(r2).name AS to
结果是一个表格:
from | to
-----|----
p1 | p3
p1 | p4
p5 | p3
p5 | p4
我的问题是:
- 对吗?
- 这是最好的方法吗?我的意思是当有数千个节点时的性能。
- 如果我想要三个人的公共节点怎么办?
【问题讨论】: