2017-07-28 82 views
2

当在一组只有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 

回答

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 
+0

这实际上是在工作,但我们如果集合中的任何节点具有不同的类型,则不改变文章,但视频或歌曲。 – user732456

+3

从查询的角度来看,最方便的方法是将另一个更通用的标签添加到像Content这样的节点上,并创建一个索引在那。 –

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 
相关问题