在替代和多种条件下合并

时间:2014-03-14 21:52:13

标签: neo4j cypher

据我所知,不可能在merge语句中使用where。那我该怎么做多个条件?

我想要实现的目标,但无法发挥作用:

MERGE (n:Node) 
WHERE n.key = "test1" OR n.key = "test2"
ON CREATE n.key = "test1"
return n

那么如何在我的合并声明中创建或条件?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

看起来MERGE不支持WHERE子句。但是,您可以为每个属性指定一个测试值;例如:

MERGE (n:Node {key:'test1'})
RETURN n;

在您的情况下,由于您要为每个属性测试多个值,因此无法使用MERGE执行此操作

另外,如果我理解你要做的事情,那么看起来MERGE是不正确的。我认为以下Cypher代码应该为您提供您正在寻找的结果:

MATCH (n:Node { key: "test1" })
RETURN n
UNION
OPTIONAL MATCH (n:Node { key: 'test2' })
SET n.key = 'test1'
RETURN n;

答案 1 :(得分:0)

不确定如何处理已经有两个节点的情况,一个位于test1,另一个位于图表中test2。您必须合并两个节点,例如也将关系从test2移到test1。

一般来说,我会尝试这样的事情(就像cybersam建议的那样):

OPTIONAL MATCH (n:Node { key: 'test2' })
SET n.key = 'test1'
MERGE (m:Node { key: "test1" })
RETURN m