Neo4j 使用中间表创建两个节点之间的关系
我对Neo4j的世界非常陌生,所以如果这是一个微不足道的问题,请原谅我。我已经使用LOAD CSV将两个表加载到数据库中 艺术家:Neo4j 使用中间表创建两个节点之间的关系,neo4j,cypher,neo4j-browser,Neo4j,Cypher,Neo4j Browser,我对Neo4j的世界非常陌生,所以如果这是一个微不足道的问题,请原谅我。我已经使用LOAD CSV将两个表加载到数据库中 艺术家: artist_name,artist_id "Bob","abc" "Jack","def" "James","ghi" "Someone","jkl" "John","mno" 机构名单: "Agency" "A" "B" "C" "D" 最后,我有一个中间表,其中有艺术家和代表他们的机构 艺术家协会: artist_name,artist_id,agency
artist_name,artist_id
"Bob","abc"
"Jack","def"
"James","ghi"
"Someone","jkl"
"John","mno"
机构名单:
"Agency"
"A"
"B"
"C"
"D"
最后,我有一个中间表,其中有艺术家和代表他们的机构
艺术家协会:
artist_name,artist_id,agency
"Bob","abc", "A"
"Bob","abc", "B"
"Jack","def", "C"
"James","ghi", "C"
"Someone","jkl","B"
"Someone","jkl", "C"
"John","mno", "D"
请注意,一些艺术家可以是多个代理的一部分(这就是为什么我没有在艺术家表中包含代理变量的原因)
我试图获得四个代理节点,它们基于:表示关系连接到每个艺术家。基本上是这样的:
(机构:机构)-[:代表]->(艺术家:艺术家)
我尝试过的代码是:
LOAD CSV WITH HEADERS FROM "file:///agency_list.csv" as agencies
CREATE (agency:Agency {agency: agencies.Agency})
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///artists.csv" as artists
CREATE (artist:Artist {artist: artists.artist_name, artist_id: artists.artist_id})
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///artist_agencies.csv" as line
CREATE (ag:Agency) - [:REPRESENTS] -> (ar:Artist {track_artist_uri:line.track_artist_uri})
到目前为止,我得到了这个,每个蓝色节点都是一个机构名称的副本。而不是只有一个代理节点通过:代表关系连接到所有艺术家
我想我的问题是,我不知道如何通过这个中间艺术家机构表将艺术家表与机构列表表关联起来。有没有更好的方法来做到这一点,还是我走对了方向
谢谢!
Joey在创建它们之间的关系之前,
artist\u agencies.csv
查询需要找到合适的Agency
和artist
节点。例如:
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///artist_agencies.csv" as line
MATCH (ag:Agency) WHERE ag.agency = line.agency
MATCH (ar:Artist) WHERE ar.artist_id = line.artist_id
CREATE (ag)-[:REPRESENTS]->(ar)
旁白:artist_agents.csv
文件不需要artist_name
列
[更新]
如果
artist\u agencies.csv
数据可能导致创建重复的关系,请将CREATE
替换为(更昂贵的)MERGE
,以避免这种情况。并确保您没有重复的代理
或艺术家
节点。谢谢!非常感谢你的回答,并理解你在这里的建议。我不仅要把艺术家和艺术家配对,还要把中介机构和中介机构配对。问题是,当我运行这个程序时,我创建了2800万个关系,这远远超出了它应该达到的程度。我应该在这里进行某种重复数据消除吗?请参阅我的更新答案。此外,请确保没有重复的机构
或艺术家
节点。此外,您还需要确保在:Agency(机构)和:Artist(艺术家id)上有索引,以便快速查找节点。注意。使用“合并”而不是“创建”进行更新,并删除了重复项。我们现在在做生意,谢谢赛博山姆的帮助,也谢谢InverseFalcon的提示!