neo4j更新数组属性(如果存在)

neo4j更新数组属性(如果存在),neo4j,cypher,Neo4j,Cypher,我在我的项目中使用Neo4J2.0。如果不存在关系,我想使用Cypher添加关系,否则请更新数组属性 MATCH (a:Term), (b:Term) WHERE a.Name = 'abc' AND b.Name = 'xyz' CREATE UNIQUE a-[r:gives]->b SET r.positive = coalesce(r.positive + (last(r.positive)/2),[0.125]) RETURN r; 然而,使用coalesce和last时,

我在我的项目中使用Neo4J2.0。如果不存在关系,我想使用Cypher添加关系,否则请更新数组属性

MATCH (a:Term), (b:Term) 
WHERE a.Name = 'abc' AND b.Name = 'xyz' 
CREATE UNIQUE a-[r:gives]->b
SET r.positive = coalesce(r.positive + (last(r.positive)/2),[0.125])
RETURN r;
然而,使用coalesce和last时,我得到了一个错误(当创建新关系时,基本上r.positive不存在,可能我没有正确使用coalesce)

是否有其他方法编写此查询


谢谢

合并很好,但是当
r.positive
null
时,
最后一个(r.positive)
也为null,并且不能将
null
一分为二

这能满足你的期望吗

MATCH (a:Term),(b:Term) 
WHERE a.name = 'abc' AND b.name = 'xyz' 
CREATE UNIQUE (a)-[r:gives]->(b) 
SET r.positive = 
  CASE WHEN NOT (HAS (r.positive)) 
    THEN [0.125]
  ELSE r.positive + LAST(r.positive)/2 END 
RETURN r

是的,确实如此,尽管我最终使用了不同的方法:设置r.positive=coalesce(r.positive,[])+last(coalesce(r.positive,[0.25])/2
MATCH (a:Term),(b:Term) 
WHERE a.name = 'abc' AND b.name = 'xyz' 
CREATE UNIQUE (a)-[r:gives]->(b) 
SET r.positive = 
  CASE WHEN NOT (HAS (r.positive)) 
    THEN [0.125]
  ELSE r.positive + LAST(r.positive)/2 END 
RETURN r