我有两个从mysql导出的CSV文件:
#Disease CSV标头# 疾病大师 ID(自动增量,pk) disease_name
#测试CSV标头#
测试大师
ID(自动增量,pk),
TEST_NAME,
parent_disease_ID(指向疾病中的ID列。
大师tbl)
我运行以下cypher命令:
LOAD CSV WITH HEADERS FROM.
"http://localhost/disease_mstr.csv" AS line
MERGE (d:Disease {did: toInteger(line.ID), diseasename:
line.disease_name})
LOAD CSV WITH HEADERS FROM.
"http://localhost/test_mstr.csv" AS line
MERGE (d:Tests {tid: toInteger(line.ID), testname:
line.test_name, did: toInteger(line.parent_disease_ID)})
MATCH (t:Tests), (d:Disease) CREATE (t:Tests)-
[r:TEST_FOR]->(d:Disease) RETURN t, r, d
以上cypher返回一种与许多测试相关的疾病,而我只想反过来!有人可以纠正我吗?
答案 0 :(得分:1)
您可以在测试文件的一次传递中创建疾病节点,测试节点以及测试和疾病节点之间的关系。
LOAD CSV WITH HEADERS
FROM "http://localhost/test_mstr.csv"
AS line
MERGE (disease:Disease {did: toInteger(line.parent_disease_ID)})
MERGE (test:Tests {tid: toInteger(line.ID), testname:
line.test_name})
MERGE (test)-[r:TEST_FOR]->(did)
然后在第二次传递后更新疾病名称。
LOAD CSV WITH HEADERS
FROM "http://localhost/disease_mstr.csv" AS line
MERGE (d:Disease {did: toInteger(line.ID)})
SET d.diseasename = line.disease_name
答案 1 :(得分:0)
[EDITED]
在创建关系的查询中,您需要筛选共享相同Tests
值的Disease
和did
个节点:
MATCH (t:Tests), (d:Disease)
WHERE t.did = d.did
MERGE (t)-[r:TEST_FOR]->(d)
RETURN t, r, d;
此查询还将CREATE
替换为MERGE
,以避免在同一TEST_FOR
和t
对之间创建重复的d
关系。如果您已经有这样的重复关系,请先删除它们。
另外,为了提高效率,您应该考虑在:Disease(did)
或:Tests(did)
上index创建 - 以最多的实例为准。