0

我已经创建了一个对主 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 上匹配:

这是我的数据样本,所以相同的主 ID,具有不同的 cuis,我试图在 cui 上匹配。

4

2 回答 2

1

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

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

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

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

WITH n, line.cui= cui

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

于 2019-07-17T19:46:14.360 回答
1

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

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); 
于 2019-07-17T12:06:08.317 回答