在neo4j中仅查找单向关系

在neo4j中仅查找单向关系,neo4j,Neo4j,在我的neo4j图形数据库中,我有一种类型的节点Person和一种类型的关系SENT\u GIFT。所以这使得两个特定的Persons之间存在双向关系。比如说- i) 人员1只能向人员2赠送礼物 ii)第2人只能向第1人赠送礼物 iii)人_1和人_2可以互相赠送礼物 现在我想写一个密码,它将找到所有给某个特定的人(由profileid指定)送礼(SENT_gift)的人,但该特定的人没有给这些人送礼 我试着用下面的方式写密码- MATCH (specific_person:Person {pr

在我的neo4j图形数据库中,我有一种类型的节点
Person
和一种类型的关系
SENT\u GIFT
。所以这使得两个特定的
Person
s之间存在双向关系。比如说-

i) 人员1只能向人员2赠送礼物

ii)第2人只能向第1人赠送礼物

iii)人_1和人_2可以互相赠送礼物

现在我想写一个密码,它将找到所有给某个特定的人(由profileid指定)送礼(SENT_gift)的人,但该特定的人没有给这些人送礼

我试着用下面的方式写密码-

MATCH (specific_person:Person {profileid: <profile_id>})
MATCH (from_person:Person)-[rOpp:SENT_GIFT]->(specific_person)-[rDir:SENT_GIFT]->(from_person)
WHERE rDir is null
RETURN from_person;
匹配(特定的人:人{profileid:})
匹配(来自个人:个人)-[rOpp:已发送礼物]->(特定个人)-[rDir:已发送礼物]->(来自个人)
其中rDir为null
从个人返回;

但是没有得到预期的结果。

您需要在此处使用WHERE子句来否定您不希望在匹配中使用的模式

比如:

MATCH (from_person:Person)-[:SENT_GIFT]->(specific_person:Person {profileid: $profile_id})
WHERE NOT (specific_person)-[:SENT_GIFT]->(from_person)
RETURN from_person;
Match (user:User)-[r]->(user2:User)
Where Not (user2)-[]->(user)
Return user, r, user2