Neo4j只使用一种类型的关系筛选节点

Neo4j只使用一种类型的关系筛选节点,neo4j,cypher,Neo4j,Cypher,我是neo4j的新手,我被困在这个练习中。我必须找到那些在他们城市只有朋友的学生的名字和城市。图表如下所示: 关系的名字是“FRIEND_of”,颜色代表城市 非常感谢。由于城市属性存储在节点上,您可以添加WHERE子句: MATCH (user:User) MATCH (user)-[:FRIEND_OF]-(friend) WHERE user.city = friend.city RETURN user.name, collect(distinct(friend)) as friends

我是neo4j的新手,我被困在这个练习中。我必须找到那些在他们城市只有朋友的学生的名字和城市。图表如下所示:

关系的名字是“FRIEND_of”,颜色代表城市


非常感谢。

由于城市属性存储在节点上,您可以添加WHERE子句:

MATCH (user:User)
MATCH (user)-[:FRIEND_OF]-(friend)
WHERE user.city = friend.city
RETURN user.name, collect(distinct(friend)) as friends
编辑 如果要返回其所有朋友都居住在同一城市的用户,请尝试以下方法:

MATCH (user:User)-[:FRIEND_OF]->(friend)
WITH user, collect(friend) AS friends
WHERE ALL (x IN friends 
           WHERE x.city = user.city)
RETURN user

城市是否作为属性存储在用户节点上?@ChristophenWillemsen是的,所有用户节点都有名称和城市,例如创建一个:create(:user{Name:'Juan',city:'Madrid'});但这不是正确的答案。。。它必须返回在其城市中只有朋友的用户,这将返回在其城市中有朋友的用户,但如果他们在其他城市也有朋友,则返回:(我以前写过同样的查询。正如你所看到的,它返回了一组在用户所在城市的朋友。是的,但它也返回了在其他城市有朋友的用户。如果a有两个朋友,B(来自同一城市)和C(来自其他城市),它将返回a,而不应该返回。在SQL中,我认为它应该带有“不在”[在其他城市有朋友的用户]“过滤,但在neo4j中我不知道怎么做。就是这样!非常感谢!:)现在我知道怎么做了,呵呵