使用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
我需要一种显示位置的方法->进攻->记录的号码。谢谢
答案 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;