在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运行两次以上查询,我预计两个EVENT与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
答案 0 :(得分:0)
您可以为每个条件/查询对调用APOC函数apoc.do.when(使用空字符串作为var replaceImg = image.split('/appscripts/');
var finalImageName = "../../../appscripts/"+replaceImg[1];
参数)。
例如:
else
由于您的评论表明您的查询都是只写的,因此上面的示例将返回CALL apoc.do.when(<condition1>, <query1>, '', {}) YIELD value
WITH value AS ignored
CALL apoc.do.when(<condition2>, <query2>, '', {}) YIELD value
WITH value AS ignored
.
.
.
分配给value
变量(您可以忽略)。