如果要满足某些条件,我正在尝试在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)
答案 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)