【问题标题】:Pass variable to query used in a Neo4j apoc.do.case procedure将变量传递给 Neo4j apoc.do.case 过程中使用的查询
【发布时间】: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.caseelse 查询中,我必须执行另一个match 来重新定位我已经位于外部optional matches 中的节点。

有没有办法重用我已经在apoc.do.caseelse 查询中的optional match 中找到的ua 变量?

【问题讨论】:

    标签: neo4j cypher neo4j-apoc


    【解决方案1】:

    你试过了吗?除了参数,我认为你应该使用apoc.do.when

    optional match (u:User {id:$userId})
    optional match (a:Account {id:$accountId})
    call apoc.do.when(
       not exists((u)-[:ACCOUNT_ADMIN]->(a)),
       "return {error:'user is not admin of the specified account'} as result",
       "with $a  AS a,$u AS u create (a)-[:CONTAINS]->(:Project {name:$projectName})<-[:PROJECT_ADMIN]-(u) return {result:'project created'} as result",
       {u:u,a:a, projectName:$projectName}
    )
    yield value
    return value.result as result
    

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 2019-11-03
      • 2015-02-06
      相关资源
      最近更新 更多