2012-07-06 120 views
17

在Cypher支架在Neo4j的,给定两个节点,如果有没有关系,我想创建(Foo类型的)一个的权重性质的关系。如果这种关系已经存在,我想增加它的重量属性。在Cypher中,如果不存在,我如何创建关系;更新财产,如果它确实

是否有一个单一的Cypher查询做到这一点的好办法?谢谢!

编辑:一些额外的细节: 节点已创建的,独特的,在索引。

+0

你没事吧用的Neo4j的快照版本?在neo4j 1.8中,您可以使用Cypher更新图形,但不能使用其他版本。 – Nicholas 2012-07-06 00:35:57

+0

是的,我正在使用SNAPSHOT。 – Newtang 2012-07-06 00:36:36

+0

所以基本上你正在寻找扫描所有节点,如果已连接,增量,如果没有,创建关系? – Nicholas 2012-07-06 02:48:55

回答

44

这就是为什么我们在1.8中加入CREATE UNIQUE

START a=node(...), b=node(...) 
CREATE UNIQUE a-[r:CONNECTED_TO]-b 
SET r.weight = coalesce(r.weight?, 0) + 1 

了解更多关于CREATE UNIQUEhere,问号here和凝聚here

+0

完美!正是我在找的东西。我知道关于RELATE,但不是合并词组。 “?”究竟是什么?做? – Newtang 2012-07-06 06:03:04

+0

编辑答案指向手动 – Andres 2012-07-06 12:38:58

+4

由于Neo4j的2.0?操作员已被删除。请参阅:http://neo4j.com/docs/snapshot/query-operators.html#query-operators-comparison – 2014-10-27 13:39:56

10

为了完成安德烈的回答,问号在财产到底是现在的Neo4j 2.错误 因此请求将是:

MATCH a, b 
WHERE a(...) AND b(...) 
CREATE UNIQUE a-[r:CONNECTED_TO]->b 
SET r.weight = coalesce(r.weight, 0) + 1 
相关问题