我是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)
有人能指出我正确的方向吗?任何帮助表示赞赏。
答案 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 ...我一直在尝试一切以为我的逻辑是正确的...总是小事。