Neo4j根据节点的属性之一有条件地创建关系

时间:2016-05-27 21:47:54

标签: neo4j

我需要在两个节点之间创建两种不同类型的关系。关系类型取决于节点的一个属性。

例如,

我有两个节点USER和EVENT。我有两种关系在他们之间创造。  邀请  2. requestToInvite

偶数节点有属性inviteOnly。

创建"邀请"如果inviteOnly为true,则为relationship。否则创建" requestToInvite"关系。

这就是我想要的:

MATCH (u:User)
WHERE ID(u) = 13
WITH u
MATCH (e:Events)
WHERE ID(e) = 0
WITH u,e
CREATE (u)-[:inviteONLYTrue]->(e) WHERE e.inviteOnly = true
CREATE (u)-[:inviteONLYFALSE]->(e) WHERE e.inviteOnly = false
WITH u,e
RETURN u,e

2 个答案:

答案 0 :(得分:2)

目前没有条件,但您可以通过迭代由CASE语句创建的零或单元素列表来解决它。

MATCH (u:User) WHERE ID(u) = 13
MATCH (e:Events) WHERE ID(e) = 0
FOREACH (_ in case e.inviteOnly when true then [1] else [] end |
  CREATE (u)-[:inviteONLYTrue]->(e) )
FOREACH (_ in case e.inviteOnly when false then [1] else [] end |
  CREATE (u)-[:inviteONLYFALSE]->(e) )
RETURN u,e

答案 1 :(得分:0)

APOC Procedures刚刚更新了对条件密码执行的支持,但在这种特殊情况下,您只需要一种与动态关系类型创建关系的方法。 APOC也有这样的程序。这是一个例子:

MATCH (u:User)
WHERE ID(u) = 13
WITH u
MATCH (e:Events)
WHERE ID(e) = 0
WITH u,e, CASE WHEN e.inviteOnly THEN 'inviteONLYTrue' ELSE 'inviteONLYFALSE' END as relType
CALL apoc.create.relationship(u, relType, {}, e) YIELD rel
RETURN u,e