我想在尽可能少的请求中捆绑一大堆操作。背后的逻辑应该如下:
我已经偶然发现 创建独特的 ,但这似乎仅适用于关系。如何确保至少存在头节点,以便我可以在其上运行创建唯一语句?
我现在正在做的是触发多个请求。第一个是查明节点是否存在:
start x=node:index({key}={value}) return ID(x) as id
如果没有返回id,我会发出另一个请求来创建节点,最后发出最后一个请求来创建第二个节点和关系:
start n=node({id})
create unique n-[:POINTS_TO {label:{label}}]->(x {{key}:{value}})
return n,x
我想知道是否有更好的方式捆绑所有这些...
答案 0 :(得分:4)
如果使用自动索引,则可以执行以下操作:
start n=node:node_auto_index(key={value})
with count(*) as exists
where exists=0
create (n {key: {value}}
return n;
statement 2:
start n=node:node_auto_index(key={value})
create unique n-[:REL {foo:"bar"}]->(m {a:"b"})
set r.answer = 42
set m.c="d"
return r,m;
<\ n>在Neo4j 2.0中,你想要的是MERGE。