【发布时间】:2022-01-21 01:12:52
【问题描述】:
在此查询中,我想检查$accountId 和$userId 参数的有效性,如果它们有效,则创建一个附加到用户和帐户节点的新项目。
optional match (u:User {id:$userId})
optional match (a:Account {id:$accountId})
call apoc.do.case([
not exists((u)-[:ACCOUNT_ADMIN]->(a)),
"return {error:'user is not admin of the specified account'} as result",
"match (u:User {id:$userId})-[:ACCOUNT_ADMIN]->(a:Account {id:$accountId})
create (a)-[:CONTAINS]->(:Project {name:$projectName})<-[:PROJECT_ADMIN]-(u)
return {result:'project created'} as result",
{accountId:$accountId, userId:$userId, projectName:$projectName}
)
yield value
return value.result as result
它看起来很有效,但并没有让我觉得很优雅。特别令人讨厌的是,在传递给apoc.do.case 的else 查询中,我必须执行另一个match 来重新定位我已经位于外部optional matches 中的节点。
有没有办法重用我已经在apoc.do.caseelse 查询中的optional match 中找到的u 和a 变量?
【问题讨论】:
标签: neo4j cypher neo4j-apoc