在 cypher 或 APOC 中,有没有办法根据多个条件执行多个查询。我需要类似这个 APOC 的东西
CALL apoc.do.case([condition, query, condition, query, …], elseQuery:'',
params:{}) yield value
但是在这里,一旦我们遇到第一个真实条件,它就会跳过所有进一步的条件和查询。我想在我的条件为真的情况下执行所有那些查询。
简而言之,我正在寻找类似于 java case 语句的东西(没有中断;在 case 之间)
更新
我运行以下查询以使用多个 apoc.do.when 但似乎只有我的第二个 apoc.do.when 没有执行:
CREATE (y:EVENT { _id: 1, localComponentID:'l1', externalComponentID:'e1'}) with y
call apoc.do.when(exists(y.localComponentID),"MATCH(e:EVENT) where
e.localComponentID = lcl and e._id <> y._id with y,e limit 1 create (y)-
[r:LOCAL_LINK]->(e)",'',{y:y,lcl:y.localComponentID}) YIELD value WITH value AS ignored, y
call apoc.do.when(exists(y.externalComponentID),"MATCH(e:EVENT) where
e.externalComponentID = ext and e._id <> y._id with y,e limit 1 create (y)-
[r:EXTERNAL_LINK]->(e)",'',{y:y, ext:y.externalComponentID}) YIELD value
WITH value AS ignored return ignored
如果我在第一次运行时使用 _id = 1 并在第二次运行时使用 _id=2 运行上述查询两次,我希望两个事件与 LOCAL_LINK 和 EXTERNAL_LINK 连接。但我只在他们之间获得 LOCAL_LINK,而不是 EXTERNAL_LINK。我不确定我做错了什么。
注意:我使用限制 1,因为在多个匹配的情况下,我只想用一个节点创建 LINK。
更新 2
得到它的工作,在我的示例查询中,我没有从第一个apoc.do.when返回 y
这是有效的更新查询:
CREATE (y:EVENT { _id: 1, localComponentID:'l1', externalComponentID:'e1'}) with y
call apoc.do.when(exists(y.localComponentID),"MATCH(e:EVENT) where
e.localComponentID = lcl and e._id <> y._id with y,e limit 1
create (y)-[r:LOCAL_LINK]->(e) RETURN y",'',
{y:y,lcl:y.localComponentID}) YIELD value WITH value AS ignored, y
call apoc.do.when(exists(y.externalComponentID),"MATCH(e:EVENT) where
e.externalComponentID = ext and e._id <> y._id with y,e limit 1
create (y)-[r:EXTERNAL_LINK]->(e)",'',{y:y, ext:y.externalComponentID})
YIELD value
WITH value AS ignored return ignored