首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以cypher / apoc格式执行多条件多查询

以cypher / apoc格式执行多条件多查询
EN

Stack Overflow用户
提问于 2020-03-12 18:01:13
回答 1查看 275关注 0票数 0

我是neo4j cypher的新手,我试图构建一个多次使用apoc.do.when的图,但我遇到了一个问题,错误是:

代码语言:javascript
复制
Expected parameter(s): CT, vm_src, vm_dest, app_src, app_dest

我的Cypher查询是:

代码语言:javascript
复制
LOAD CSV WITH HEADERS FROM "file:///input.csv" AS CT

//Create vm
MERGE (vm_src:VM {name : CT.hostname_source})
MERGE (vm_dest:VM {name : CT.hostname_dest})

WITH vm_src, vm_dest

// create app with label Unknown_appli  
CALL apoc.do.when($CT.source_appli_name = "unknown_appli", 
'MERGE (app_src:App:Unknown_appli{name: "CT.hostname_source"}) RETURN app_src',
'MERGE (app_src:App{name:"CT.source_appli_name"}) RETURN app_src',
{CT:$CT}) YIELD value
WITH value.app_src as app_src

CALL apoc.do.when($CT.appli_name_dest = "unknown_appli" , 
'MERGE (app_dest:App:Unknown_appli{name: "CT.hostname_dest"}) RETURN app_dest',
'MERGE (app_dest:App{name: "CT.appli_name_dest"}) RETURN app_dest',
{CT:$CT}) YIELD value
WITH value.app_dest as app_dest


//create calls relations
CALL apoc.do.when($CT.direction = "IN" AND $vm_src.name <> $vm_dest.name , 
        'MERGE ($vm_dest)-[:CALLS]->($vm_src) RETURN $vm_dest', '',
        {CT:$CT,vm_src:$vm_src, vm_dest:$vm_dest}) YIELD value
WITH value as ignored

CALL apoc.do.when($CT.direction = "IN" AND $app_src.name <> $app_dest.name, 
        'MERGE (app_dest)-[:CALLS]->(app_src) RETURN app_dest', '', 
        {CT:$CT,app_src:$app_src, app_dest:$app_dest}) YIELD value
WITH value as ignored1


CALL apoc.do.when($CT.direction = "OUT" AND $vm_src.name <> $vm_dest.name, 
        'MERGE ($vm_src)-[:CALLS]->($vm_dest) RETURN $vm_src', '', 
        {CT:$CT,vm_src:$vm_src,vm_dest:$vm_dest}) YIELD value
WITH value as ignored2

CALL apoc.do.when($CT.direction = "OUT" AND $app_src.name <> $app_dest.name , 
        'MERGE (app_src)-[:CALLS]->(app_dest) RETURN app_src', '', 
        {CT:$CT,app_src:$app_src,app_dest:$app_dest}) YIELD value
WITH value as ignored3

//create child relations
MERGE (app_src)-[:CONTAINS]->(vm_src)
MERGE (app_dest)-[:CONTAINS]->(vm_dest)

有什么需要帮忙的吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-03-13 03:36:42

以下是我在您的查询中发现的问题:

当参数不存在时,它有时会尝试使用它们(并且是unnecessary).

  • It,有时不适当地用引号将参数括起来。)
  1. It有时会尝试在参数不存在的时候使用它们。在这些情况下,它也不能在参数名之前使用"$“前缀。
  2. 某些WITH子句不会传递后面的子句所需的所有变量。

这可能会更好地工作:

代码语言:javascript
复制
LOAD CSV WITH HEADERS FROM "file:///input.csv" AS CT

//Create vm
MERGE (vm_src:VM {name : CT.hostname_source})
MERGE (vm_dest:VM {name : CT.hostname_dest})

WITH CT, vm_src, vm_dest

// create app with label Unknown_appli  
CALL apoc.do.when(CT.source_appli_name = "unknown_appli", 
'MERGE (app_src:App:Unknown_appli{name: $CT.hostname_source}) RETURN app_src',
'MERGE (app_src:App{name: $CT.source_appli_name}) RETURN app_src',
{CT:CT}) YIELD value
WITH CT, vm_src, vm_dest, value.app_src as app_src

CALL apoc.do.when(CT.appli_name_dest = "unknown_appli", 
'MERGE (app_dest:App:Unknown_appli{name: $CT.hostname_dest}) RETURN app_dest',
'MERGE (app_dest:App{name: $CT.appli_name_dest}) RETURN app_dest',
{CT:CT}) YIELD value
WITH CT, vm_src, vm_dest, app_src, value.app_dest as app_dest

//create calls relations
CALL apoc.do.when(CT.direction = "IN" AND vm_src.name <> vm_dest.name, 
        'MERGE ($vm_dest)-[:CALLS]->($vm_src)', '',
        {CT:CT, vm_src:vm_src, vm_dest:vm_dest}) YIELD value
WITH CT, vm_src, vm_dest, app_src, value.app_dest as app_dest

CALL apoc.do.when(CT.direction = "IN" AND app_src.name <> app_dest.name, 
        'MERGE ($app_dest)-[:CALLS]->($app_src)', '', 
        {CT:CT,app_src:app_src, app_dest:app_dest}) YIELD value
WITH CT, vm_src, vm_dest, app_src, value.app_dest as app_dest

CALL apoc.do.when(CT.direction = "OUT" AND vm_src.name <> vm_dest.name, 
        'MERGE ($vm_src)-[:CALLS]->($vm_dest)', '', 
        {CT:CT,vm_src:vm_src,vm_dest:vm_dest}) YIELD value AS ignored1

CALL apoc.do.when(CT.direction = "OUT" AND app_src.name <> app_dest.name, 
        'MERGE ($app_src)-[:CALLS]->($app_dest) RETURN app_src', '', 
        {CT:CT,app_src:app_src,app_dest:app_dest}) YIELD value

//create child relations
MERGE (app_src)-[:CONTAINS]->(vm_src)
MERGE (app_dest)-[:CONTAINS]->(vm_dest)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60651645

复制
相关文章

相似问题

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