Neo4j:如何合并现有数据(在数据库中)和非现有数据(以CSV格式)

时间:2015-07-24 13:30:46

标签: database csv neo4j cypher graph-databases

我已经有节点作为"项目"在我的数据库中。我还有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或添加信息是否有助于它们与特定项目相匹配?)

最好的问候,Finfan

1 个答案:

答案 0 :(得分:0)

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