Запрос шифрования neo4j с параметром NULL, используемым для необязательного создания отношения - возможно ли это?
Контекст (чтобы объяснить использование слова "приложение" в модели предметной области): Мое программное обеспечение управляет заявлениями об отпуске (для замены бланков заявлений на школьные каникулы на бумаге).
Есть ли способ обработать два аналогичных запроса ниже в одном запросе шифра, который принимает необязательный / необязательный параметр "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"""
1 ответ
Это технически возможно, но решение - это взлом, и вам лучше, если только это не является узким местом в производительности, сделать это в двух запросах для ясности. Я верю, что позже будет добавлена поддержка, чтобы сделать это чисто, но в настоящее время она не находится в разработке.
Хак - это использовать FOREACH в качестве оператора ветвления, поэтому для каждого менеджера проекта создайте его, который не будет создан, если в качестве параметра не был отправлен менеджер проекта. В этом случае вам нужно будет преобразовать ноль в пустой список, но вы можете использовать COALESCE для этого:
FOREACH( manager IN COALESCE(managers ,[]) | CREATE (pm:ProjectManager))