通过一组公共节点连接的返回节点 [英] Return nodes who are connected by a common set of nodes
问题描述
Neo4j中是否有使用密码或gremlin的方法来返回节点列表,这些节点之间具有一组公共节点?
Is there a way in Neo4j, using either cypher or gremlin, to return a list of nodes that have a common set of nodes between them?
一个例子是
Person1-[KNOWS]->Friend1
Person1-[KNOWS]->Friend2
Person1-[KNOWS]->Friend3
Person2-[HATES]->Friend2
Person2-[HATES]->Friend3
我想从Person1
开始说:找我讨厌所有我认识的人的人",这应该返回Person2
,因为Person1
知道Friend2,Friend3
并且Person2
讨厌Friend2,Friend3
.
I want to start at Person1
and say, "Find me the people who hate all the people I know", which should return Person2
since Person1
knows Friend2,Friend3
and Person2
hates Friend2,Friend3
.
我从找到连接开始,
START
person=node(1)
MATCH
person-[KNOWS]->friend<-[HATES]-enemy
RETURN
enemy
但我似乎无法找到一种表达方式,以使该人不得不讨厌所有朋友.
but I can't seem to find a way to express it such that the Person has to hate ALL the friends.
这可以在Cypher中完成吗?
Can this be done in Cypher?
推荐答案
语法应如下所示,但我无法摆脱聚合错误消息
the syntax should be as follows, but i can't get rid off the aggregate error message
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
这篇关于通过一组公共节点连接的返回节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!