首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将变量值持久化到cypher查询的其他部分

将变量值持久化到cypher查询的其他部分
EN

Stack Overflow用户
提问于 2018-12-14 04:23:49
回答 1查看 375关注 0票数 0

我的查询遇到了一个问题,在FOREACH子句中定义的变量不能用于后续的合并。在下面的代码片段中,我在创建节点之前检查每个字段是否存在一个值。在某些情况下,这些字段可能会丢失,所以我不想为它们创建节点。然后在最后的FOREACH中,假设对这些节点的引用存储在变量中,我尝试创建它们之间的关系。

代码语言:javascript
运行
复制
FOREACH(ignoreMe IN CASE WHEN "${record:value('/11')}" <> "" THEN [1] ELSE [] END |
  MERGE (company:Company{name:"${record:value('/11')}"}))

FOREACH(ignoreMe IN CASE WHEN "${record:value('/1')}" <> "" THEN [1] ELSE [] END |
  MERGE (cloudSuite:CloudSuite{name:"${record:value('/1')}"}))

FOREACH(ignoreMe IN CASE WHEN "${record:value('/18')}" <> "" THEN [1] ELSE [] END |
  MERGE (application:Application{name:"${record:value('/18')}"}))

FOREACH(ignoreMe IN CASE WHEN "${record:value('/8')}" <> "" THEN [1] ELSE [] END |
  MERGE (applicationInstance:ApplicationInstance{applicationId:"${record:value('/8')}"}))

FOREACH(ignoreMe IN CASE WHEN "${record:value('/9')}" <> "" THEN [1] ELSE [] END |
  MERGE (screen:Screen{name:"${record:value('/9')}"}))

FOREACH(ignoreMe IN CASE WHEN "${record:value('/19')}" <> "" THEN [1] ELSE [] END |
  MERGE (screenInstance:ScreenInstance{screenId:"${record:value('/19')}"}))

FOREACH(ignoreMe IN CASE WHEN ("${record:value('/0')}" IN ["Accessed"])THEN [1] ELSE [] END |
    MERGE (screenInstance)-[:INSTANCE_OF]->(screen)
    MERGE (screenInstance)-[:VIEWED_ON]->(applicationInstance)
    MERGE (application)-[:IMPLEMENTS]->(screen)
    MERGE (session)-[:ACCESSES]->(screenInstance))

然而,实际发生的情况是,当我可视化我的图形时,我看到定义为孤立节点的有效节点以及在一些“幻影”节点之间创建的关系。所以我的问题是,是否有一种方法可以将对有效节点的引用传递给创建关系的合并。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-14 05:18:22

您将无法使用这种方法,因为您发现在FOREACH中引入的变量在它之外将不可用。

您可能希望考虑使用APOC conditional procedures (使用apoc.do.when()过程)来代替FOREACH解决方法。您可以从执行的Cypher返回通过生成的value映射变量公开的值。

例如,仅查看第一个代码片段:

代码语言:javascript
运行
复制
CALL apoc.do.when("${record:value('/11')}" <> "", 
"MERGE (company:Company{name:\"${record:value('/11')}\"}) RETURN company") YIELD value
WITH value.company as company
...

请记住,如果条件中的查询需要使用条件外部的变量,则需要通过参数映射传递该变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53769539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档