根据条件创建节点

时间:2018-07-19 10:48:21

标签: neo4j cypher

如果要满足某些条件,我正在尝试在Neo4j中建立节点之间的关系。目前我有node(a)和node(b):

我想要的

if node(b) is in label1 then make relation: node(a)-[:r]-node(b:label1)
else merge node(b) in label2 then make relation node(a)-[:r]-node(b:label2)

我有什么

match (a:label1 {id:"t1"}) 
merge (b:label1 {id:"t6"})
on create 
  set b:label2 remove b:label1 
merge (a)-[:Friends_with]-(b)

1 个答案:

答案 0 :(得分:0)

不幸的是,Cypher并没有真正的if-then-else语法(ON MATCH和ON CREATE是最接近的语法)。我建议运行多个密码并根据返回结果执行后续操作。

就像

MATCH (a:label1 {id:"t1"}) 
MATCH (b:label1 {id:"t6"})
MERGE (a)-[:Friends_with]-(b)
return COUNT(b) as b1Exists

如果返回0,则执行

MATCH (a:label1 {id:"t1"}) 
MERGE (b:label2 {id:"t6"})
MERGE (a)-[:Friends_with]-(b)

根据您的数据,您可能会摆脱这种情况

MATCH (a:label1 {id:"t1"}) 
MERGE (b {id:"t6"})
ON CREATE SET b:label2
MERGE (a)-[:Friends_with]-(b)

但是请注意,在1个Cypher中执行此操作可能会导致错误(在这种情况下,如果有效标签的数量多于1和2。您将需要此方法的UUID)