NEO4J在加载CSV上创建关系

时间:2019-03-19 08:46:05

标签: neo4j

我是Neo4j的新手,正在尝试在现有节点之间建立关系……在本例中为Artist&Album。 我已经加载了两个,没有问题,如下所示:

LOAD CSV WITH HEADERS FROM "file:///chinook/artist.csv" AS line
CREATE (:Artist {artistid: toInteger(line.ArtistId), name: line.Name})

LOAD CSV WITH HEADERS FROM "file:///chinook/album.csv" AS line
CREATE (:Album {albumid: toInteger(line.AlbumId), title: line.Title, artistid: toInteger(line.ArtistId)})

您可以看到artistid对于两种节点类型都是通用的,这就是我试图在其上创建关系的原因。

我尝试了多种方法来使其正常工作,但它并没有按我预期的那样工作。例如

LOAD CSV WITH HEADERS FROM "file:///chinook/artist.csv" AS line
MATCH (al:Album {artistd: line.ArtistId})
MATCH (ar:Artist {artistd: line.ArtistId})
CREATE (ar)-[:RELEASED]->(al)

LOAD CSV WITH HEADERS FROM "file:///chinook/artist.csv" AS line
match (ar:Artist), (al:Album) 
where ar.artistid = line.ArtistId and 
      al.artistid = line.ArtistId
MERGE (ar)-[:RELEASED]->(al)

有人能指出我正确的方向吗?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

查询的问题是artistd在数据库中为整数,并且您将其与artistd(在以下内容中为字符串)进行匹配查询。

LOAD CSV WITH HEADERS FROM "file:///chinook/artist.csv" AS line
MATCH (al:Album {artistd: line.ArtistId})
MATCH (ar:Artist {artistd: line.ArtistId})
CREATE (ar)-[:RELEASED]->(al)

您需要在匹配时转换为整数,如下所示:

LOAD CSV WITH HEADERS FROM "file:///chinook/artist.csv" AS line
MATCH (al:Album {artistd: toInteger(line.ArtistId)})
MATCH (ar:Artist {artistd: toInteger(line.ArtistId)})
MERGE (ar)-[:RELEASED]->(al)

建议:

您无需将artistd存储为相册节点的属性,只需albumid即可工作。在这种情况下,您需要在albumid字段上匹配相册

答案 1 :(得分:0)

非常感谢Raj ...我一直在尝试一切以为我的逻辑是正确的...总是小事。

相关问题