如何匹配被约束忽略的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 语言的两个方面引起的:
WITH 子句 删除所有现有变量 ,子句中明确指定的变量除外。因此,由于您的 WITH
子句未指定 n
节点,因此 n
成为该子句后的未绑定变量。
如果模式的任何部分尚不存在,MERGE 子句将创建其 整个模式 。由于 n
未绑定任何内容,因此 MERGE
子句将继续创建整个模式(包括 2 个节点)。
因此,您可以通过简单地在 WITH
子句中指定 n
变量来解决问题,如:
WITH n, line.cui= cui
但是@Raj 的查询更好,完全避免了 WITH
的需要。
我创建了一个对主要 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 语言的两个方面引起的:
WITH 子句 删除所有现有变量 ,子句中明确指定的变量除外。因此,由于您的
WITH
子句未指定n
节点,因此n
成为该子句后的未绑定变量。如果模式的任何部分尚不存在,MERGE 子句将创建其 整个模式 。由于
n
未绑定任何内容,因此MERGE
子句将继续创建整个模式(包括 2 个节点)。
因此,您可以通过简单地在 WITH
子句中指定 n
变量来解决问题,如:
WITH n, line.cui= cui
但是@Raj 的查询更好,完全避免了 WITH
的需要。