我如何连接3节点

时间:2019-01-04 12:33:14

标签: neo4j graph-databases spring-data-neo4j

使用Neo4j的新手可以有人解释我如何做到这一点。我有一个包含以下内容的3列的csv文件

offences|  places | recorded
rape    |  nicosia| 1
robbery |  nicosia| 3
rape    |  limasol| 4
robbery |  limasol| 5

我想要的是一种将违法行为与地点联系起来的方法,而这里记录的数字是我想出的。

LOAD CSV FROM 'file:///crime2.csv' AS Line 
MERGE (district:DISTRICT { Name: Line[1]})
CREATE (crime:CRIME { Name: Line[0]})
CREATE (number:Number{ Name:toInteger(Line[2])})
CREATE (number)-[:Amount]->(crime)-[:From]->(district)
WITH district, crime, number
MATCH (a:CRIME)-[:`From`]->(b:DISTRICT) RETURN a,b; 

我的代码无法完全处理作业,而是显示如下 my code only display the places and the offence

我需要一种显示位置的方法->进攻->记录的号码。谢谢

2 个答案:

答案 0 :(得分:0)

您只需在MATCH查询中添加数字

LOAD CSV FROM 'file:///crime2.csv' AS Line 
MERGE (district:DISTRICT { Name: Line[1]})
CREATE (crime:CRIME { Name: Line[0]})
CREATE (number:Number{ Name:toInteger(Line[2])})
CREATE (number)-[:Amount]->(crime)-[:From]->(district)
WITH district, crime, number
MATCH p = (:Number)-[:AMOUNT]->(:CRIME)-[:`From`]->(:DISTRICT) RETURN p;

尽管您的建模可能存在问题。我不会将数字创建为单独的节点,而是将金额存储在地区与犯罪或其他事物之间的关系属性中。您现在的操作方式没有意义。

要添加的另一件事是您可能想要更改

CREATE (crime:CRIME { Name: Line[0]})

MERGE (crime:CRIME { Name: Line[0]})

因此,一个特定犯罪的节点为一个,因为它是图形数据库,并且您希望将数据连接到IMO。

答案 1 :(得分:0)

您可以在查询中添加一个以上的节点匹配条件

MATCH (n:Number)-[:Amount]->(a:CRIME)-[:From]->(b:DISTRICT) RETURN a,b,n; 

如果您在任何实际的用例/项目中都使用此模型,那么您需要考虑所使用的数据模型(如@Tomaz所建议的那样)。

编辑:

我在笔记本电脑上尝试了上述查询,这给了我预期的输出。

我建议您将数据加载查询与返回查询分开,因为每次运行此查询时,您都在复制一半的数据。

您使用过create子句,该子句在每次运行此查询时都会再次创建Crime和Number节点。

删除现有数据:

MATCH (n:Number),(a:CRIME),(b:DISTRICT) DETACH DELETE  a,b,n;

加载数据

LOAD CSV FROM {path} AS Line  
MERGE (district:DISTRICT { Name: Line[1]}) 
CREATE (crime:CRIME { Name: Line[0]}) 
CREATE (number:Number{Name:toInteger(Line[2])}) 
CREATE(number)-[:Amount]->(crime)-[:From]->(district);

获得结果:

MATCH (n:Number)-[:Amount]->(a:CRIME)-[:From]->(b:DISTRICT) RETURN a,b,n;

enter image description here