我如何连接 3 节点

How do i connect 3 Node

我是使用 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

我需要一种方法来显示地点 -> 冒犯 -> recorded_number。谢谢

您只需将数字添加到 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。

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

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

如果您在任何现实生活中使用它 case/project,那么您需要考虑您正在使用的数据模型(正如@Tomaz 所建议的)。

编辑:

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

我建议您将数据加载查询和 return 查询分开,因为每次 运行 此查询都会复制一半的数据。

您每次运行执行此查询时都使用了 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;