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

Neo4j 返回由一组公共节点连接的节点,neo4j,cypher,gremlin,Neo4j,Cypher,Gremlin,在Neo4j中,有没有一种方法可以使用cypher或gremlin返回节点列表,这些节点之间有一组共同的节点 例如 Person1-[KNOWS]->Friend1 Person1-[KNOWS]->Friend2 Person1-[KNOWS]->Friend3 Person2-[HATES]->Friend2 Person2-[HATES]->Friend3 我想从Person1开始说,“找到那些恨我认识的所有人的人”,然后返回Person2,因为Perso

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

例如

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

Person2-[HATES]->Friend2
Person2-[HATES]->Friend3
我想从
Person1
开始说,“找到那些恨我认识的所有人的人”,然后返回
Person2
,因为
Person1
知道
Friend2,Friend3
Person2
Friend2,Friend3

我从找到联系开始

START
    person=node(1)
MATCH
    person-[KNOWS]->friend<-[HATES]-enemy
RETURN 
    enemy
开始
人员=节点(1)
匹配

person-[KNOWS]->friend语法应如下所示,但我无法摆脱聚合错误消息

START
    person=node(1)
MATCH
    person-[r1:KNOWS]->friend<-[r2:HATES]-enemy
WHERE
    count(distinct r1)=count(distinct r2)
RETURN 
    enemy
开始
人员=节点(1)
匹配

person-[r1:KNOWS]->friendfriend语法应如下所示,但我无法摆脱聚合错误消息

START
    person=node(1)
MATCH
    person-[r1:KNOWS]->friend<-[r2:HATES]-enemy
WHERE
    count(distinct r1)=count(distinct r2)
RETURN 
    enemy
开始
人员=节点(1)
匹配

person-[r1:KNOWS]->friends这几乎是完美的。不幸的是,它不会返回正确的结果,因为
r1
是一种
KNOWS
关系,而
r2
是一种
haves
关系。这并不重要,因为恨你所有朋友的人必须拥有与恨你的类型KNOWS相同数量(计数)的关系。因此,比较计数(r1)和计数(r2)应该是一个合适的等式。这几乎是完美的。不幸的是,它不会返回正确的结果,因为
r1
是一种
KNOWS
关系,而
r2
是一种
haves
关系。这并不重要,因为恨你所有朋友的人必须拥有与恨你的类型KNOWS相同数量(计数)的关系。因此,比较计数(r1)和计数(r2)应该是一个合适的等式。