当前位置: 首页 > 知识库问答 >
问题:

带合并的Cypher neo4j-case表达式

蓬野
2023-03-14
MATCH (g:Game)-[:PLAYER]->(u:User)-[r1:AT]->(b1:Block)-[:NEXT]->(b2:Block) 
WHERE g.game_id='G222' and u.email_id = 'xyz@example.com' and b1.block_id='16' 
SET r1.status='Skipped', r1.enddate=20141225
WITH u, b2,b1, g, r1
SET b1.test = CASE b2.fork 
WHEN 'y' THEN
     MERGE (u)-[r2:STAGE {startdate:20141225, enddate:'99999999', status:'InProgress'}]->(b2     {fork:'fail'}) RETURN 1
ELSE 
     MERGE (u)-[r2:STAGE {startdate:20141225, enddate:'99999999', status:'InProgress'}]->(b2)   RETURN 2
END
WITH u, g
MATCH (u)-[:TIME]->(h:Time)<-[:TIME]-(g)
SET h.after = 0
SET h.before = h.before + 1

共有1个答案

高承望
2023-03-14

要执行条件写操作,需要使用foreach技巧。使用case可以返回一个元素数组或一个空数组。foreach迭代case表达式,因此有条件地执行操作。如果您也想要一个else部分,则需要另一个foreach,使用大小写中的反向条件。作为一个例子,而不是

WHEN 'y' THEN
   MERGE (u)-[r2:STAGE {startdate:20141225, enddate:'99999999', status:'InProgress'}]->(b2     {fork:'fail'}) RETURN 1
ELSE 
    MERGE (u)-[r2:STAGE {startdate:20141225, enddate:'99999999', status:'InProgress'}]->(b2)   RETURN 2
END

使用

FOREACH(ignoreMe IN CASE WHEN 'y' THEN [1] ELSE [] END | 
    MERGE (u)-[r2:STAGE {startdate:20141225, enddate:'99999999', status:'InProgress'}]->(b2 {fork:'fail'})
)
FOREACH(ignoreMe IN CASE WHEN NOT 'y' THEN [1] ELSE [] END | 
    MERGE (u)-[r2:STAGE {startdate:20141225, enddate:'99999999', status:'InProgress'}]->(b2)
)

请参阅Mark在这方面的博客文章。

 类似资料:
  • QueryDsl 3.3.4 Hibernate 3.6.10-Final I有两个实体: org.hibernate.hql.ast.tree.SelectClause.InitializeExplicitSelectClause(SelectClause.java:156)

  • 问题内容: 我正在尝试创建一个switch语句,但似乎无法使用被求值的表达式(而不是设置的字符串/整数)。我可以轻松地使用if语句来执行此操作,但希望大小写应该更快。 我正在尝试以下 我缺少明显的东西吗?Google在这种情况下并不友好。 任何帮助/指针表示赞赏 问题答案: 你总是可以做 它之所以有效是因为它是一个常量,因此将执行第一个case语句下带有计算结果为true的表达式的代码。 我猜这有

  • 我目前正在学习Haskell,突然遇到了这个表达式。 我的直觉是,由于用0除法,这将导致运行时错误,但从测试来看,情况并非如此。 我的结论是,这一定是由于Haskell内部的懒惰评估。因为匹配任何东西,所以它不会检查它与什么比较? 所以,如果有人能告诉我这个评估是否正确,如果不正确,为什么。另外,请详细说明在不实际查看表达式的情况下,案例行可以匹配的前提。

  • 问题内容: 我的转换案例声明昨天运行良好。但是,当我今天早些时候运行代码时,eclipse给我一个错误,强调了红色的case语句,并说:case表达式必须是常量表达式,它是常量,我不知道发生了什么。这是我的代码如下: 所有R.id.int都用红色下划线。 问题答案: 在常规的Android项目中,资源R类中的常量声明如下: 但是,从ADT 14开始,在图书馆项目中,它们将这样声明: 换句话说,常数

  • 问题内容: 我有一个XYZ模型,我需要获取给定查询集的字段a,b和表达式x / y的最大值。 它适用于田野。就像是: 但是,我找不到一种针对表达式的方法。尝试类似的东西: 给出一个错误: 尝试类似的东西: 给出一个错误: 甚至像: 同样不起作用,并给出与上述相同的错误: 我发现可以做到的一个技巧是: 之所以有效,是因为它会生成正确的SQL,但令人困惑,因为我确实在z属性处获得了正确的值,但没有获得

  • 本文向大家介绍Ruby中case表达式详解,包括了Ruby中case表达式详解的使用技巧和注意事项,需要的朋友参考一下 Ruby的case表达式有两种形式: 第一种形式接近于一组连续的if语句:它让你列出一组条件,并执行第一个为真的条件表达式所对应的语句。 第二种形式,在case语句的顶部指定一个目标,而每个when从句列出一个或者多个比较条件 和if一样,case返回执行的最后一个表达式的值;而