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}}
但我似乎找不到表达方式,以至于人必须讨厌所有的朋友。
这可以在Cypher中完成吗?
答案 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