cypher/Neo4j中朋友之间的联系
我想查询一个图表,基本上人们可以联系其他人 我想运行一个密码查询,它从一个人开始,返回他们联系过的所有人,以及他们之间的任何联系人 这是我开始的问题cypher/Neo4j中朋友之间的联系,neo4j,cypher,Neo4j,Cypher,我想查询一个图表,基本上人们可以联系其他人 我想运行一个密码查询,它从一个人开始,返回他们联系过的所有人,以及他们之间的任何联系人 这是我开始的问题 start n = node:node_auto_index(name = "TOM") MATCH (n)-[r]-(m) RETURN * 在neo4j web界面中,返回所有20个节点和32个关系中的Tom、Tom联系的任何人以及Tom联系人之间的任何关系。结果以m,n r(节点,节点,关系)格式输出 但是当我跑的时候 start n =
start n = node:node_auto_index(name = "TOM") MATCH (n)-[r]-(m) RETURN *
在neo4j web界面中,返回所有20个节点和32个关系中的Tom、Tom联系的任何人以及Tom联系人之间的任何关系。结果以m,n r(节点,节点,关系)格式输出
但是当我跑的时候
start n = node:node_auto_index(name = "TOM") MATCH (n)-[r]-(m) RETURN count(*)
它说只有26种关系,不包括汤姆的联系人之间的任何关系
我将结果拉入d3.js可视化,因此理想情况下,结果仍将以类似于节点、节点、关系的格式输出(即一行中的每个相关对)
编辑:更多详细信息
我有一个用户可以相互联系的图表。我希望能够查询一个用户,并获得所有他接触过的用户,以及他接触过的用户之间的任何联系。类似于LinkedInMaps
但我需要一种格式的输出,我可以相对直接地在一个应用程序中使用
例如,如果输出有
(Tom) - (Tom's friend) - (Tom's Friend's Friend)
这将更容易被打破
(Tom) - (Tom's friend)
(Tom's Friend) - (Tom's Friend's Friend)
因为这个d3图需要一个Nodes对象和一个Links对象的输入
编辑 从uklas的回答来看,这起作用了
start n = node:node_auto_index(name = "Tom")
MATCH (n)-[r]-(m)
RETURN n as person, m as personas_fr, r
UNION
start n = node:node_auto_index(name = "Tom")
MATCH (a)-[r1]-(n)-[r2]-(m), (a)-[r]-(m)
RETURN a as person, m as personas_fr, r
可能有多种联系关系(汤姆曾多次联系过一些人)。使用
count(*)
聚合这些联系人,它只返回唯一的联系人。只需使用*
即可返回匹配的所有内容
如果你能写更多关于你的目标,以及你想做什么的话,我也可以补充一些关于如何进行的建议
更新
不幸的是,我不熟悉d3格式,但这可能会有帮助:
start n = node:node_auto_index(name = "TOM")
MATCH (n)-[r]-(m)
RETURN n as person, m as personas_fr
UNION
start n = node:node_auto_index(name = "TOM")
MATCH (n)-[r]-(m), (m)-[r2]-(m2)
WHERE Id(n) <> Id(m2)
RETURN m as person, l as personas_fr
我添加了更多的细节。谢谢你,我以前从未想到过联合。不幸的是,m2似乎由m的所有朋友组成(所以tom的朋友的朋友…),但我只想包括朋友的朋友,他们也是tom的另一个朋友的朋友(所以是不同m的朋友)。。。因此,图表应该只包括tom和他的朋友,还包括他的朋友之间的关系。我对代码做了一个小改动,然后将其添加到原始帖子中。
(Tom) - (Tom's friend1)
(Tom) - (Tom's friend2)
(Tom) - (Tom's friend3)
(Tom's Friend1) - (Tom's Friend's Friend)
(Tom's Friend1) - (Tom's Friend's Friend)
(Tom's Friend1) - (Tom's Friend's Friend)
(Tom's Friend2) - (Tom's Friend's Friend)
(Tom's Friend2) - (Tom's Friend's Friend)
(Tom's Friend3) - (Tom's Friend's Friend)
(Tom's Friend3) - (Tom's Friend's Friend)