1

Neo4j 中有没有一种方法,使用 cypher 或 gremlin,返回一个节点列表,这些节点之间有一组公共节点?

一个例子是

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

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

我想开始Person1说,“找到我讨厌所有我认识的人的人”,这应该返回,Person2因为Person1知道Friend2,Friend3Person2讨厌Friend2,Friend3

我从寻找联系开始,

START
    person=node(1)
MATCH
    person-[KNOWS]->friend<-[HATES]-enemy
RETURN 
    enemy

但我似乎无法找到一种方式来表达它,以至于这个人不得不恨所有的朋友。

这可以在 Cypher 中完成吗?

4

1 回答 1

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
于 2012-07-03T08:05:00.867 回答