Cypher / Neo4J:如何找到互连的neighbors_of_neighbors

时间:2014-06-10 10:11:57

标签: neo4j cypher

我正在玩Neo4J,我有人和城市的节点。假设我已经访问了伦敦,我希望看到我想创建一个查询,返回所有访问过您所访问过的城市的人访问过的所有城市。但是,它一定不是您访问过的城市。哇,那是满口的。

我创建了一个示例案例。在此示例中,有问题的查询将返回巴黎市。

将其粘贴到http://console.neo4j.org/进行播放。

创造(克里斯:人{姓名:'克里斯'}),(杰夫:人{姓名:'杰夫'}),(皮特:人{姓名:'皮特'}),(亚历克斯:人{姓名: 'Alex'}),(John:person {name:'John'}),(London:city {name:'London'}),(Paris:city {name:'Paris'}),(Mumbay:city {名称:'Mumbay'}),(Moskva:city {name:'Moskva'}),(Seattle:city {name:'Seattle'}),(Chris) - [:VISITED] - >(London),(杰夫) - [:VISITED] - GT;(伦敦),(约翰) - [:VISITED] - GT;(伦敦),(杰夫) - [:VISITED] - GT;(巴黎),(约翰) - [:人气的 - >(巴黎),(杰夫) - [:访客] - >(西雅图),(伦敦) - [:VISITED_BY] - >(克里斯),(伦敦) - [:VISITED_BY] - > (杰夫),(伦敦) - [:VISITED_BY] - GT;(约翰),(巴黎) - [:VISITED_BY] - GT;(杰夫),(巴黎) - [:VISITED_BY] - GT;(约翰),(西雅图) - [:VISITED_BY] - GT;(杰夫),(皮特) - [:VISITED] - GT;(西雅图),(西雅图) - [:VISITED_BY] - GT;(皮特),(克里斯) - [: VISITED] - GT;(Mumbay),(Mumbay) - [:VISITED_BY] - GT;(克里斯),(亚历) - [:VISITED] - GT;(Mumbay),(Mumbay) - [:VISITED_BY] - GT; (亚历克斯),(亚历) - [:VISITED] - GT;(火车头),(莫斯科) - [:VISITED_BY] - GT;(亚历克斯),(皮特) - [:VISITED] - GT;(火车头),(火车头) - [:VIS ITED_BY] - GT;(皮特)

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

我使用您的数据创建了GraphGist:http://www.neo4j.org/graphgist?66acb4a7e53be6181449

假设基于查询的人是克里斯:

MATCH (chris:person { name:'Chris' })-[:VISITED]->(city)<-[:VISITED]-(otherPerson)
MATCH (otherPerson)-[:VISITED]->(otherCity)
WHERE otherCity<>city
WITH otherCity.name AS cityName, collect(otherPerson.name) AS persons
WHERE length(persons)> 1
RETURN cityName