当集合中只有2个节点时,它相对容易
MATCH (a:Article {id : "PMID:16009338"}),(c:Article {id: "PMID:21743479"})
WITH a, c
MATCH (a)-[r]-(d)-[r1]-(c)
RETURN d
但是3个节点的类似尝试并没有起作用
MATCH (a:Article {id : "PMID:16009338"}),(c:Article {id: "PMID:21743479"}), (p:Article {id: "PMID:21741956"})
WITH a, c, p
MATCH (a)-[r]-(d)-[r1]-(c)-[r2]-(d)-[r3]-(p)
RETURN d
它寻找c和d之间的不同关系。 r1和r2。如果我将r2更改为r1,它会说:不能使用相同的关系变量' r1'多种模式。
即使我让它工作,也不可能有4个以上的节点。
==== 尝试使用不同类型的3个节点,执行速度足够快
MATCH (a:Article {id : "AID:16009338"}),(v:Video {id: "VID:21743479"}), (s:Song {id: "SID:21741956"})
WITH a, v, s
MATCH (a)-[]-(d)
WITH d, v, s
MATCH (v)-[]-(d)
WITH d, s
MATCH (s)-[]-(d)
RETURN d
答案 0 :(得分:2)
您可以针对文章列表查找公共节点,然后确保之后匹配的数字与您匹配的数字相同。
WITH ['PMID:16009338','PMID:21743479','PMID:21741956'] as articles
MATCH (d)--(a:Article)
WHERE a.id in articles
WITH articles, d, COLLECT(a) AS matched
WHERE size(articles) = size(matched)
RETURN d
答案 1 :(得分:0)
所以你有X节点都需要连接到其他节点D?
MATCH (a:Article {id : "AID:16009338"})--(d),(v:Video {id: "VID:21743479"})--(d), (s:Song {id: "SID:21741956"})--(d)
RETURN d
如果您知道关系的方向,请将其添加进去。如果您知道关系的名称,请同时添加:
MATCH (a:Article {id : "AID:16009338"})-[:ART_TO_D]->(d),(v:Video {id: "VID:21743479"})-[:VID_TO_D]->(d), (s:Song {id: "SID:21741956"})-[:SONG_TO_D]->(d)
RETURN d