如何使用Neo4j Cypher从JSON创建一对多关系

时间:2019-05-03 09:45:29

标签: neo4j cypher

我想从文件中的JSON项目创建一对多关系。具体来说,每个JSON项都包含一个作者及其出版的书籍ID。我有数据库中已经存在的作者节点和书籍节点。

数据如下:

{"id": "1", "name": "Dr. Suess", "books": [{"i": "100", "i": "101"}]}
{"id": "2", "name": "Shell Silverstein", "books": [{"i": "200", "i": "201"}]}

我正在尝试使用以下代码导入节点:

CALL apoc.load.json('file:/data.txt') YIELD value AS q 
    MATCH (a:Author {{id:q.id}})
    UNWIND q.books as books
    WITH a, books
    MATCH (b:Books {{id:books.i}})
    CREATE (a)-[:AUTHORED]->(b)

但是,这只导入了我期望的一部分节点。任何有关如何解决此问题的建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

好吧,如果您说不是所有的作者和书籍都被导入,则意味着这两个MATCH语句找不到他们想要的内容。

一种可能的情况是,您将ID存储为整数,但是现在您尝试将其作为字符串进行匹配。利用提供的信息,很难假设其他任何事情。

我将MATCH更改为MERGE语句以查看是否存在问题。

CALL apoc.load.json('file:/data.txt') YIELD value AS q 
    MERGE (a:Author {{id:q.id}})
    UNWIND q.books as books
    WITH a, books
    MERGE (b:Books {{id:books.i}})
    CREATE (a)-[:AUTHORED]->(b)