返回由一组公共节点连接的节点

时间:2012-06-25 02:25:45

标签: neo4j cypher gremlin

Neo4j中是否有一种方法可以使用cypher或gremlin返回节点列表,这些节点之间有一组共同的节点?

一个例子是

Person1-[KNOWS]->Friend1
Person1-[KNOWS]->Friend2
Person1-[KNOWS]->Friend3

Person2-[HATES]->Friend2
Person2-[HATES]->Friend3

我想从Person1开始,然后说:“找到那些讨厌我认识的所有人的人”,由于Person2知道Person1 Friend2,Friend3,我应该返回Person2Friend2,Friend3讨厌START person=node(1) MATCH person-[KNOWS]->friend<-[HATES]-enemy RETURN enemy

我从找到连接开始,

{{1}}

但我似乎找不到表达方式,以至于人必须讨厌所有的朋友。

这可以在Cypher中完成吗?

1 个答案:

答案 0 :(得分:1)

语法应该如下,但我无法摆脱聚合错误消息

START
    person=node(1)
MATCH
    person-[r1:KNOWS]->friend<-[r2:HATES]-enemy
WHERE
    count(distinct r1)=count(distinct r2)
RETURN 
    enemy

编辑:也许这更接近:

START
    person=node(1)
MATCH
    person-[r1:KNOWS]->friend<-[r2:HATES]-enemy, person-[r3?:KNOWS]-enemy
WITH
    person, enemy, count(distinct r1) as  rk1, count(distinct r2) as rk2,r3
WHERE 
    r3 is null
    AND
    r1=r2 
RETURN 
    enemy