Neo4j 在Cypher中,如果不';不存在;如果有,则更新属性

Neo4j 在Cypher中,如果不';不存在;如果有,则更新属性,neo4j,graph-databases,cypher,Neo4j,Graph Databases,Cypher,在Neo4J中的Cypher中,给定两个节点,如果它们之间没有关系,我想创建一个权重属性为1的关系(Foo类型)。如果这个关系已经存在,我想增加它的权重属性 在单个密码查询中有没有一种好的方法可以做到这一点?谢谢 编辑:一些其他详细信息: 节点已经创建、唯一,并且在索引中。这正是我们在1.8中添加创建唯一的原因 START a=node(...), b=node(...) CREATE UNIQUE a-[r:CONNECTED_TO]-b SET r.weight = coalesce(r.w

在Neo4J中的Cypher中,给定两个节点,如果它们之间没有关系,我想创建一个权重属性为1的关系(Foo类型)。如果这个关系已经存在,我想增加它的权重属性

在单个密码查询中有没有一种好的方法可以做到这一点?谢谢

编辑:一些其他详细信息:
节点已经创建、唯一,并且在索引中。

这正是我们在1.8中添加
创建唯一的原因

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

阅读有关创建唯一、问号和合并的更多信息。

要完成Andres的回答,属性末尾的问号现在是Neo4j 2的错误。 因此,请求将是:

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

为供将来参考,CREATE UNIQUE已被弃用(请参阅)。看起来您可以通过匹配和合并执行类似的操作:

                MATCH (a:Person {name: 'Wonder Woman'})
                MERGE (b:Person {name: 'Aries'})
                MERGE (a)-[r:FOUGHT]->(b)
                ON CREATE SET r.weight = 1
                ON MATCH SET r.weight = r.weight + 1

在这里,神奇女侠至少和白羊座战斗过一次,否则它会增加重量。

你同意使用快照版本的neo4j吗?在neo4j 1.8中,您可以使用Cypher更新图形,但在任何其他版本中都不能。因此,基本上您希望扫描所有节点,如果已连接,则增加,如果未连接,则创建关系?Nicholas,感谢您的回复。我补充了一些额外的细节;节点是唯一的,并且有索引,所以我不认为我应该扫描所有的节点。但是,除此之外,你的评论是正确的:如果连接,增加,如果没有,创建关系。完美!这正是我想要的。我知道RELATE,但不知道coalesce这个词。自从Neo4j 2.0以来,“?”到底做了什么?操作员已被删除。请参阅:Create unique现在已不推荐使用,请改用“合并”: