【问题标题】:Neo4j: How to merge existing data (in a database) and non existing data (in CSV)Neo4j:如何合并现有数据(在数据库中)和非现有数据(在 CSV 中)
【发布时间】:2015-07-24 13:30:45
【问题描述】:

我的数据库中已经有节点作为“项目”。我也有 CSV 中的标签。 CSV 如下所示:

|name|
|Information1|
|Information2|
|...|

我想将它们放在一起,这样一个特定的项目将在 CSV 中包含关系为“belongs_to”的所有信息。 结果应如下所示:

Information1 - belongs_to -> Project1
Information2 - belongs_to -> Project1

我该怎么做?我尝试了不同的方法,但都不对。

我想我可以先加载 CSV,然后再获取如下关系:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:C:/.../projects.csv" AS row
CREATE (:AddInformation {name: row.name});
...

MATCH (p:PROJECT { id:1 }) 
WITH range(1,4) AS RANGE, p 
FOREACH (r IN RANGE | 
    MERGE (add:AddInformation { id:r })-[rel:belongs_to]->(p))

这可行,但在这种情况下,只有新的 AddInformation,而不是我正在寻找的那个。

我的问题又是:如何将一个项目与来自特定 CSV 的信息放在一起(有关系)? (是否有助于通过 CSV 中的 ID 识别 AddInformation 或添加应与特定项目匹配的信息?)

最好的问候,芬凡

【问题讨论】:

    标签: database csv neo4j cypher graph-databases


    【解决方案1】:

    FOREACH 不适合这种情况。 现在我为我的 AddInformation 使用了第二个属性。

    CSV 现在看起来像这样:

    |name        |property|
    |Information1|...     |
    |Information2|...     |
    |...         |...     |
    

    所以首先我加载这个 CSV,其次我使用这个命令:

    MATCH (p:Project), (add:AddInformation) WHERE id(p)=8 AND HAS (add.property)
        MERGE (add)-[:belongs_to]->(p)
    

    之后我删除了这个属性,一切都很好。

    MATCH (m {property:"Insert"}) REMOVE m.property RETURN m
    

    【讨论】:

      猜你喜欢
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 2023-03-27
      • 2019-07-04
      相关资源
      最近更新 更多