根据Neo4j中的特定条件创建节点

时间:2016-02-17 09:50:48

标签: neo4j

如果某些条件满足,我想在我的数据库中创建一些新节点

MATCH (u:User)-[:has]->(a:Account)-[:initiated]->(l:Process) WHERE ID(l)=984 
UNWIND [{mobile:123,email:'a@b.com'}, {mobile:456, email:'a1@b1.com'}] as x
OPTIONAL MATCH (u1:User) WHERE u1.mobile = x.mobile OR u1.email = x.email CASE u1 WHEN u1 IS NULL THEN CREATE (u)-[:pending]->(p:Pending {mobile: x.mobile, email: x.email})
ELSE CREATE (u1)-[:pending]->(p:Pending {mobile: x.mobile, email: x.email})
END 

我想查看条件是否存在移动电话或电子邮件的用户。如果存在,我想创建附加到节点(u1)的节点(p),否则我想创建附加到我的节点的节点,即(u)。

以某种方式创建不起作用

1 个答案:

答案 0 :(得分:0)

目前,进行条件写入的唯一方法是使用FOREACH/CASE WHEN技巧。根据您的条件,您可以创建1个元素或空数组,并使用FOREACH进行迭代,例如

...
FOREACH(x in CASE WHEN u1 IS null THEN [1] ELSE [] END | 
  CREATE (u)-[:pending]->(p:Pending {mobile: x.mobile, email: x.email}))
FOREACH(x in CASE WHEN u1 IS NOT null THEN [1] ELSE [] END | 
  CREATE (u1)-[:pending]->(p:Pending {mobile: x.mobile, email: x.email}))

有关详细信息,请参阅http://www.markhneedham.com/blog/2014/06/17/neo4j-load-csv-handling-conditionals/