在Neo4j中,有一种简单的方法来组合WHERE语句,以避免多次读取同一文件,同时忽略NULL值。
例如,是否可以一次浏览CSV,并执行以下操作
LOAD CSV WITH HEADERS from "file" as line
WITH line, line.FirstNodeID as NodeOneID
WHERE NodeOneID IS NOT NULL
WITH NodeOneID
CREATE (n1:NodeOne { ID : NodeOneID })
WITH line, line.SecondNodeID as NodeTwoID
WHERE NodeTwoID IS NOT NULL
WITH NodeTwoID
CREATE (n2:NodeTwo { ID : NodeTwoID})
;
截至目前,即使NodeTwoID为非null,如果NodeOneID为null,LOAD脚本也将退出。我怎样才能构建一个简单的if-else类似条件,只要NodeOneID或NodeTwoID不为null,LOAD脚本就会加载正确的节点?
更新:刚看到CASE。快点检查一下..
答案 0 :(得分:3)
我认为你可以为每一行做这样的事情。如果值不为null,则将其放在一个集合中。然后,如果集合具有项目,则创建节点,如果它们是空的,则不创建节点。如果它们都具有值,则创建两个节点。
LOAD CSV WITH HEADERS from "file" as line
WITH line
, case when line.FirstNodeID is not null then [line] else [] end as NodeOneID
, case when line.SecondNodeID is not null then [line] else [] end as NodeTwoID
foreach(x in NodeOneID | CREATE (n1:NodeOne { ID : x.FirstNodeID }))
foreach(x in NodeTwoID | CREATE (n2:NodeTwo { ID : x.SecondNodeID }))
答案 1 :(得分:1)
这对你有用吗?
LOAD CSV WITH HEADERS from "file" as line
foreach(x in COALESCE(line.FirstNodeID) | CREATE (:NodeOne { ID : x }))
foreach(x in COALESCE(line.SecondNodeID) | CREATE (:NodeTwo { ID : x }));