CSV导入期间如何与不同节点关联

时间:2017-10-22 16:53:30

标签: neo4j cypher

我有查询:

LOAD CSV WITH HEADERS FROM 'file:///attributes.csv' AS line
MATCH (p:Property {old_id: line.property_id})
MERGE (a:Attribute {description: line.description})-[:ATTRIBUTE_OF {old_id: line.id, value: line.value}]->(p)

对于每个新行,我试图在描述相同时合并属性,但是与已匹配的Property节点建立新关系。

我遇到的问题是现有的关系正在被新的关系取代。

如何确保维护以前创建的所有关系,并且只创建新关系?

2 个答案:

答案 0 :(得分:1)

您可以分两步尝试:

  1. 首先,当MERGE相同时,line.description属性。
  2. 然后,CREATE ap个节点之间的新关系。
  3. 示例查询:

    LOAD CSV WITH HEADERS FROM 'file:///attributes.csv' AS line
    MATCH (p:Property {old_id: line.property_id})
    MERGE (a:Attribute {description: line.description})
    CREATE (a)-[:ATTRIBUTE_OF {old_id: line.id, value: line.value}]->(p)
    

答案 1 :(得分:0)

我这样做:

LOAD CSV WITH HEADERS FROM 'file:///attributes.csv' AS line
MATCH (p:Property {old_id: line.property_id})
OPTIONAL MATCH (:Attribute {description: line.description})-[r:ATTRIBUTE_OF {old_id: line.id, value: line.value}]->(p)
WHERE r IS NULL
CREATE (:Attribute {description: line.description})-[:ATTRIBUTE_OF {old_id: line.id, value: line.value}]->(p)

这可能与Bruno Peres解决方案中的查询略有不同 - 请检查并报告哪些适用于您的案例。