0

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

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

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

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

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

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

4

1 回答 1

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;

在 Neo4j 2.0 中有你想要的MERGE 。

于 2013-05-07T13:50:33.027 回答