如果丢失,Neo4j / Cypher会创建节点

时间:2013-05-07 13:02:18

标签: neo4j cypher

我想在尽可能少的请求中捆绑一大堆操作。背后的逻辑应该如下:

  • 检查是否存在key = value的head,如果不存在则创建
  • 检查是否存在key = value的tail,如果不存在则创建
  • 创建一个独特的关系(各种属性)
  • 为head&设置了一堆属性尾

我已经偶然发现 创建独特的 ,但这似乎仅适用于关系。如何确保至少存在头节点,以便我可以在其上运行创建唯一语句?

我现在正在做的是触发多个请求。第一个是查明节点是否存在:

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

我想知道是否有更好的方式捆绑所有这些...

1 个答案:

答案 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