0

我有预先存在的节点ab并且想要创建一个路径

(a) <-[:FROM]- (c:Comp) -[:TO]-> (b)

除非它已经存在。create unique在这里不太行,因为如果我们已经有了

(a) <-[:FROM]- (d:Comp) -[:TO]-> (e)

然后d将被重用为c,并且只会(c) -[:TO]-> (b)创建关系。在这种情况下,我想创建一个新:Comp节点。

无论:Comp节点是否刚刚创建,我随后都想从中create unique建立关系。

我提出了两种我不太喜欢的可能解决方案:

我想我可以通过可选的关系来做到这一点,比如

match (a) <-[r1?:FROM]- (c:Comp) -[r2?:TO]-> (b)
where r1 is null or r2 is null
create (a) <-[:FROM]- (d:Comp) -[:TO]-> (b)

但是我不确定如果:Comp节点已经存在,我将如何创建额外的关系。

另一种选择是具有c唯一标识a和的属性b,沿着

(a) <-[:FROM]- (c:Comp { from: a.uuid, to: b.uuid }) -[:TO]-> (b)

所以这create unique不会从部分匹配开始。但是,周围有多余的数据是一种气味。

4

2 回答 2

1

我在控制台中创建了我认为是您的模型:http ://console.neo4j.org/?id=l6q3q0

也许试试这个:

START a=node:node_auto_index(name='a'), b=node:node_auto_index(name='b')
WHERE NOT (a<-[:FROM]-(:Comp)-[:TO]->b)
CREATE a<-[:FROM]-(c:Comp), c-[:TO]->b
于 2013-11-06T20:08:42.763 回答
0

我还没有尝试过,但看起来MERGE从 2.0.0-rc1 开始可以做到这一点。http://docs.neo4j.org/chunked/milestone/query-merge.html

我想要类似的东西

MERGE (a) <-[:FROM]- (c:Comp) -[:TO]-> (b)
CREATE UNIQUE (c) -[:SUGGESTED_BY]-> (x:Algo)
于 2013-12-12T11:02:46.503 回答