【问题标题】:Create multiple relationships in Neo4j using array of integers using Cypher使用 Cypher 使用整数数组在 Neo4j 中创建多个关系
【发布时间】:2020-06-24 21:11:44
【问题描述】:

我是 Neo4j 和 Cypher 的新手,刚刚导入了两个 csv - 一个是地点列表,另一个是人员列表。

每个地方都有多个访问过它的人的 peopleID,以整数形式存储在一个数组中。

同样,每个人都有多个他们访问过的地点的地点 ID,这些地点以整数形式存储在一个数组中。

在我的图表中创建人物和地点节点之间的关系时,我很吃力。我尝试了以下方法,它适用于单个 ID,但它不会从 ID 数组创建任何关系:

MATCH (p1:People),(p2:Place)
WHERE p1.placeID = p2.placeID
CREATE (p1)-[:VISIT]->(p2)

People csv 文件的标题如下:

Places csv 文件的标题如下:

我想我需要使用 FOREACHUNWIND 或两者都使用,但我找不到任何好的示例来说明如何实现我所追求的目标

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    您没有使用最佳策略来导入数据。在图形数据库中,存储用于稍后创建关系的数据(如 ID 列表)并不是一个好习惯。这会给您留下很多永远不会再次使用的冗余数据(理想情况下应该删除)。

    更好的策略包括 3 个步骤:

    1. People 文件中导入节点 - 但忽略 Place ID 列表

    2. Place 文件中导入节点 - 但忽略人员 ID 列表

    3. 从其中一个文件中导入关系(我认为哪个无关紧要)。例如,我假设我们选择了Place 文件,并且每个文件行都有一个带有地点ID 的id 字段和一个包含以分号分隔的人员ID 集合的people 字段。像这样的查询将创建所有需要的关系(并避免创建重复):

      LOAD CSV WITH HEADERS FROM 'file:///places.csv' AS row
      MATCH (place:Place) WHERE place.id = row.id
      MATCH (person:People) WHERE person.id IN SPLIT(row.peopleIds, ';')
      MERGE (person)-[:VISIT]->(place)
      

    【讨论】:

    • 谢谢 - 我的计划是在建立关系后丢弃 ID,但我可以看到我的方法是次优的。稍后我会尝试上述内容,感谢您抽出宝贵时间回答。
    • 再次感谢您的回复 - 我一直在尝试并进行了一些修改以修复我使用的以下命名:LOAD CSV WITH HEADERS FROM 'http://localhost:11001/project-ca45d786-e360-4e3b-b4b4-eb8fe62a7b55/Places-Gridv2.csv' AS row MATCH (place:Place) WHERE place.id = row.id MATCH (nickname:People) WHERE nickname.id IN SPLIT(row.peopleID, ';') MERGE (nickname)-[:VISIT]->(place) 但是,当我运行它时,没有任何关系已创建。
    • 已将它们添加到上面的原始问题中
    • 看来您有错字。尝试将WHERE place.id = row.id 更改为WHERE place.id = row.placeID
    • 谢谢,查询仍然没有建立任何关系
    【解决方案2】:

    我已经设法找到了一个与我的问题类似的问题,它提供了一个答案here

    为了解决我的问题,我使用了以下方法:

    MATCH (p1:People)
    UNWIND p1.placeID as pID
    MERGE (p2:Place{placeID: pID})
    MERGE (p1)-[AT]->(p2)
    

    【讨论】:

      猜你喜欢
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多