我如何连接 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;
我是使用 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;