如果我做的事情如下:
OPTIONAL MATCH (start: {id: "1"})
OPTIONAL MATCH (end: {id: "2"})
CREATE start-[myRelationship:MyRelationshipType { title: "foobar" }]->end
如果'结束'是null(即没有找到)我想结束一个默认节点。
我正在从CSV加载数据,这样我就可以轻松识别由于缺少终端节点而无法形成的所有连接(csvs中的所有节点都是在上面之前创建的,我只是试图建立关系。
有点想法,任何想法?
@MagnusVortex,我正在寻找MERGE,但我觉得我想要某种条件(如果结束IS NULL {end = MATCH {id:" my_default_node"})...像那样
答案 0 :(得分:1)
[EDITED]
如果要创建从现有start
节点到现有end
节点的(唯一)关系(或者,如果后者不存在,则为默认节点):
MATCH (start{ id: "1" }), (default {id:"my_default_node"})
OPTIONAL MATCH (end {id: "2"})
WITH start, CASE WHEN end IS NULL THEN [default] ELSE [end] END AS todo
FOREACH (x IN todo | CREATE UNIQUE (start)-[:MyRelationshipType { title: "foobar"}]->(x));
如果找不到start
或deafult
节点,则此查询不执行任何操作。此外,如果start
节点已经具有适当的关系,则此查询将不会进行数据库更新。
如果要创建从现有start
节点到end
节点(如果它尚不存在则创建)的(唯一)关系:
MATCH (start{ id: "1" })
CREATE UNIQUE (start)-[myRelationship:MyRelationshipType { title: "foobar" }]->(end {id: "2"});
如果找不到start
节点,则此查询不执行任何操作。此外,如果start
节点已经具有匹配关系(与匹配的end
节点),则此查询将不会进行数据库更新。
作为一个兴趣点,以下查询产生相同的结果(但其配置文件显示执行起来要复杂得多,并且可能需要更多数据库命中):
MATCH (start { id: "1" })
MERGE (end { id: "2" })
MERGE (start)-[myRelationship:MyRelationshipType { title: "foobar" }]->(end);