java - Neo4j 匹配...UPSERT 的合并密码语法正在返回(无行)

标签 java neo4j graph-databases

我昨天刚开始用Neo4j学习GraphDB,现在,我想执行一个UPSERT操作,如下所示;

match (circle:Circle {id:3, cycleId:5})
merge (member1:Member {id:1}) -[invited:INVITED_TO_JOIN {c:circle, time:timestamp()}]-> (member2:Member {id:2})
return member1, member2, invited, circle

根据此处的文档 http://neo4j.com/docs/stable/query-merge.html如果具有指定属性的节点 circle 不存在,则应创建节点和指定的关系,否则,应对节点和关系执行更新。然而这并没有发生。我只收到一个回复​​ (no rows) .见下文;

enter image description here

有人可以指出我可能做错了什么吗?

编辑:但我想创建 circle , member1 member2 他们的关系 无需担心节点以前是否存在,但如果它们已经存在,只需相应地更新它们


编辑:在@DaveBennet @cybersam 和@MichaelHunger 的评论和建议之后让自己更清楚

(主要目标:) 建立一种暗示 member1 的关系已邀请member2加盟circle3

  1. 如果节点/关系不存在,则创建它们
  2. 如果节点/关系存在则更新它们

在所有情况下,任何节点或关系都不应重复

这不应该像事实证明的那样困难。我真的开始认为文档未能适当传达某些内容?

另见此处:http://neo4j.com/docs/stable/query-create-unique.html

令我困惑的是,为什么必须在match...merge 之前有一个精确的节点-匹配?/match...create unique查询可以返回行?这不会违背查询本身的目的吗?...尤其是在创建方面?

我什至创建了一个节点如下

create (member:Member) return member

然后尝试以下查询 - 完全清楚现在,一个 member节点已经存在,但没有任何属性(例如 id,如下所示)

match (member:Member {id:1})
create unique (member) -[memberOf:IS_MEMBER_OF {time:timestamp()}]-> (circle:Circle {id:3, cycleId:5, creator:member.id}) 
return member, circle, memberOf

我相信这应该搜索一个 id = 1 的成员节点...这不存在,所以它应该继续创建新的 member节点及其属性,加上定义的关系,再加上任何其他所需的节点。

令我惊讶的是,这仍然返回(没有行)。

因此,如果有人指出我要实现既定目标,请向我清楚地解释为什么我尝试的方法行不通,以及为什么建议的解决方案行得通,我将不胜感激。

谢谢。

最佳答案

您很可能想通过邀请节点连接这两个成员。

match (circle:Circle {id:3, cycleId:5})
match (member1:Member {id:1})
match (member2:Member {id:2})
create (invite:Invite {time:timestamp()})-[:TO_CIRCLE]->(circle)
create (invite)-[:INVITED_BY]->(member1)
create (invite)-[:INVITED]->(member2)
return member1, member2, invite, circle;

否则如果你只想记录事实:

match (circle:Circle {id:3, cycleId:5})
match (member1:Member {id:1})
match (member2:Member {id:2})
merge (member1)-[r:MEMBER]->(circle)
on create set r.since = timestamp(), r.by = member2.id

关于java - Neo4j 匹配...UPSERT 的合并密码语法正在返回(无行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34658644/

相关文章:

java - 通过 awselb 使用 ssl 时的 neo4j java 驱动程序问题

Neo4j:如何在社区版中设置故障转移

ruby-on-rails - neo4j.rb 检查两个节点之间是否已经存在关系

graph-databases - 在 Titan Cassandra 中使用新的 KeySpaces 并持久化数据

java - 尝试从数组总和中获取结果

java - JPA 可嵌入的嵌入式集合

java - Sybase 死锁执行存储过程(如果不存在则插入记录)

neo4j - 如何构建图形数据库以支持三向关系?

Java DES 错误加密

neo4j - 复制关系与执行更多查询