上下文(用于解释在域模型中使用“#34;应用程序"”一词):我的软件管理休假申请(用纸上替换旧式度假申请表)。
有没有办法在一个cypher查询中处理下面两个类似的查询,这个查询接受一个可空/可选参数" projectManager"?
//createApplicationForUserWithProjMgr:
match (u:User), (s:User), (p:User), (l:User)
where u.username={username} and
s.username={substitute} and
p.username={projectManager} and
l.username={lineManager}
create (u)-[ur:APPLIED_FOR]->(a:Application),
(a)-[sr:SUBSTITUTE]->(s),
(a)-[pr:PROJECT_MANAGER]->(p),
(a)-[lr:LINE_MANAGER]->(l)
set a={application}
return a, s, l, u, sr, lr, ur, p, pr"""
//createApplicationForUserWithoutProjMgr:
match (u:User), (s:User), (l:User)
where u.username={username} and
s.username={substitute} and
l.username={lineManager}
create (u)-[ur:APPLIED_FOR]->(a:Application),
(a)-[sr:SUBSTITUTE]->(s),
(a)-[lr:LINE_MANAGER]->(l)
set a={application}
return a, s, l, u, sr, lr, ur"""
答案 0 :(得分:3)
这在技术上是可行的,但是解决方案是一个黑客攻击,除非这是一个性能瓶颈,否则你现在更好,为了清晰起见,在两个查询中执行此操作。我相信稍后会以干净的方式增加支持,但目前还没有开发。
hack是使用FOREACH作为分支语句,因此foreach项目经理创建一个,如果没有项目管理器作为参数发送,则将创建一个。在这种情况下,您需要将null转换为空列表,但您可以使用COALESCE:
FOREACH( manager IN COALESCE(managers ,[]) | CREATE (pm:ProjectManager))