如何匹配被约束忽略的csv行并仅创建关系

How to match line of csv which is ignored by constraint and create only relationship

我创建了一个对主要 ID 有约束的图表。在我的 csv 中,主 ID 是重复的,但其他属性不同。基于我想创建关系的其他属性。

我多次尝试更改代码,但它没有满足我的需要。

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM 'file:///Trial.csv' AS line FIELDTERMINATOR '\t'  
MATCH (n:Trial {id: line.primary_id})  
with line.cui= cui 
MATCH (m:Intervention) 
where m.id = cui 
MERGE (n)-[:HAS_INTERVENTION]->(m); 

我已经在图表和试验中有了节点干预。所以我想做的是将试验与干预的 id 相匹配,并只创建关系。相反,我也在创建节点。

这是我的数据样本,所以主 ID 相同,但 cuis 不同,我正尝试在 cui 上进行匹配:

您可以参考以下查询,分别通过primary_id和cui找到试验节点和干预节点,并创建它们之间的关系。

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM 'file:///Trial.csv' AS line FIELDTERMINATOR '\t'  
MATCH (n:Trial {id: line.primary_id}), (m:Intervention {id: line.cui})
MERGE (n)-[:HAS_INTERVENTION]->(m); 

您观察到的行为是由 Cypher 语言的两个方面引起的:

  1. WITH 子句 删除所有现有变量 ,子句中明确指定的变量除外。因此,由于您的 WITH 子句未指定 n 节点,因此 n 成为该子句后的未绑定变量。

  2. 如果模式的任何部分尚不存在,MERGE 子句将创建其 整个模式 。由于 n 未绑定任何内容,因此 MERGE 子句将继续创建整个模式(包括 2 个节点)。

因此,您可以通过简单地在 WITH 子句中指定 n 变量来解决问题,如:

WITH n, line.cui= cui

但是@Raj 的查询更好,完全避免了 WITH 的需要。