【问题标题】:Relationships in Neo4JNeo4J 中的关系
【发布时间】:2015-04-15 15:59:11
【问题描述】:

我有两个 csv 文件,即:file1.csv {contains fields: Gene, Tumor, Totalpatients, Level} 和 file2.csv{Gene, Sample, Value, Abundance}

我需要创建两个文件之间的关系,例如:Gene is connected to Tumor 和 created to sample 等等(类似的关系)

我正在尝试以下操作,但它显示了我想要的结果(在代码下方进行了解释)

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS 
FROM 'file///home/file1.csv' AS row 
LOAD CSV WITH HEADERS 
FROM 'file///home/file2.csv' AS line




MERGE (genes:Genes { name: 'Genes' })
MERGE (cancer:Cancer { name: 'Cancer' })
MERGE (rna:RNA {name: 'RNA'})

MERGE (gene:Gene {name: UPPER(row.Gene)})
MERGE (tumor:Tumor {name: UPPER(row.Tumor)})
MERGE (patient:Patients { name: 'Patients' })
MERGE (total:Totalpatients {name: UPPER(row.Totalpatients)})
MERGE (level:Level {name: UPPER(row.Level)})
MERGE (count:Countpatients {name: UPPER(row.Countpatients)})
MERGE (sample:Sample{name: UPPER(line.Sample)})


MERGE (genes)-[:GENES]->(gene)
MERGE (genes)-[:TUMOR]->(tumor)
MERGE (gene)-[:RNA]->(Sample)


RETURN row;

执行后,关系 RNA 显示连接到空节点的 Gene,即没有要显示的属性。

如何纠正?

【问题讨论】:

  • 您能提供(即要点)file1.csv 和 file2.csv 的内容吗?或者也许是前几行?是否正确创建 :GENES 和 :TUMOR 关系?

标签: csv neo4j


【解决方案1】:

在没有详细了解您的 .csv 文件内容的情况下,并假设上面发布的 Cypher 与您正在执行的完全一样...

我认为这可能是一个简单的大小写问题。找出不同之处:

MERGE (sample:Sample{name: UPPER(line.Sample)})

MERGE (gene)-[:RNA]->(Sample)

您的标识符sample 以小写“s”开头,但在关系MERGE 语句中它是大写“S”,即Sample

这可以通过检查来自gene:Gene:RNA关系另一端的节点是否有标签来确认。

MATCH (gene:Gene)-[:RNA]-(sample)
RETURN labels(sample)

如果不存在,则 MERGE 语句在您的原始语句中创建了 Sample 节点,因为该模式不存在。当然,Sample 没有标签,也没有属性 - 因此您可以观察到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多