我有一个Neo4j图表,其中每个节点都是一个人。每个人都有两个属性:姓名和城市。关系是:friend_of和love。
我正在尝试获取仅在同一城市拥有朋友的节点(巴黎居住,巴黎B,马德里C,马德里D,A- [朋友] - > B,B- [ friend_of] - > C a A- [friend_of] - > C,D- [friend_of] - > CI只需要获得A和D,因为他们的朋友住在他们的同一个城市,只有那里)并按城市订购首先,然后按名称。
我尝试了以下内容:
MATCH (n)-[r:FRIEND_OF]-(n1) WHERE (n.City = n1.City) RETURN n,n1 ORDER BY n.City, n.Name
这给了我想要的节点,但其中一些也是错的(他们在其他城市有朋友)。
谢谢!
答案 0 :(得分:2)
基于以下neo4j控制台http://console.neo4j.org/r/5c2n8h,此查询仅返回D,如果需要:
MATCH (user:User)-[:FRIEND_OF]-(friend)
WITH user, collect(friend) AS friends
WHERE ALL (f IN friends WHERE f.City = user.City)
RETURN user
ORDER BY user.City, user.name
答案 1 :(得分:1)
试试这个:
MATCH (u:User {name:"carlos"})-[:FRIEND_OF]-(f:User)
WITH u, collect(f) as friends
WHERE ALL(f in friends WHERE f.City = u.City)
UNWIND friends as friend
RETURN friend
ORDER BY friend.City, friend.Name