Neo4j 如何在CSV导入期间关联到不同的节点
我有一个疑问:Neo4j 如何在CSV导入期间关联到不同的节点,neo4j,cypher,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) 对于每一新行,当描述相同时,我尝试合并属性,
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)
对于每一新行,当描述相同时,我尝试合并属性,但与已匹配的属性节点建立新关系
我遇到的问题是,现有的关系正在被新的关系所取代
我如何确保维护所有以前创建的关系,并且只创建新的关系?您可以尝试分两步执行:
MERGE
与line.description
相同时的属性在a
和p
节点之间创建一个新关系
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)
我会这样处理:
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的解决方案中的查询稍有不同——请检查并报告对您的案例有效的查询。对关系进行可选匹配,并使用WHERE。。。如果关系不存在,则不为NULL。(抱歉,无法提供示例,因为我现在只有一部手机。)如果您有时间(和电脑),我很想看一个示例,因为我对这方面还很陌生。谢谢:)我补充了我的答案。另外,我建议你看看GraphAware的帖子。另一个答案很有效,但谢谢你的投入,我现在对Cypher了解多一点了!:DI没有意识到我可以在一条指令中进行合并和创建,感谢指针。