Neo4j找到具有相同属性的节点

时间:2015-05-26 16:58:35

标签: graph neo4j cypher nodes

我有一个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

这给了我想要的节点,但其中一些也是错的(他们在其他城市有朋友)。

谢谢!

2 个答案:

答案 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