通过一组公共节点连接的返回节点 [英] Return nodes who are connected by a common set of nodes

查看:54
本文介绍了通过一组公共节点连接的返回节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆