美文网首页编程那些事每天写1000字IT@程序员猿媛
Cypher如何写条件判断结构,hacking一把

Cypher如何写条件判断结构,hacking一把

作者: redcohen | 来源:发表于2019-03-14 13:07 被阅读69次

问题描述

在用Cypher完成一个需求时,遇到个尴尬:
需要 CREATE 一个noden,然后根据情况给n.type赋予不同值。比如我的场景是LOAD一个文件, 然后根据当前行中某一个字段的不同取值来判断。

期望的代码逻辑如下

LOAD CSV WITH HEADERS FROM "file:///data.csv" AS row
CREATE  (c:Car)
SET  
       IF  row.engine = '1'
        c.type = 'EV'
      ELSE row.engine = '2'
        c.type = 'PV'

可是,Cypher没这个用法。

CASE is not enough

唯一能找到的类似的是CASE clause。
如下是一个官方给出的样例:

MATCH (n)
RETURN
CASE
  WHEN n.eyes = 'blue'
    THEN 1
  WHEN n.age < 40
    THEN 2
  ELSE 3
END AS result

貌似可以,但可惜的是,CASE只限于返回一个literal的表达式。也就是,无法在THEN后面放clause。

用其他语言写API,实现逻辑?

是不是我们只能用API去做了?比如用Python driver写个API,用Python语法实现判断逻辑,让Cypher完成最基本的CRUD?

不要放弃,要有专研精神! 我们可以仔细研究下Cypher语言中其他的clause,看看是否有可以利用的。

Researching...

Hack it

Ok,hacking时刻到了。感谢porterhau5的启发。

我们先来看看FOREACH的用法,看一个官方说明的例子。

MATCH p = (ups)<-[DEPENDS_ON]-(device) WHERE ups.id='EPS-7001'
FOREACH (n IN nodes(p) | SET n.available = FALSE )

能不能把CASEFOREACH结合起来呢?

比如,我们可以利用下FOREACH的机制:

如果|左侧的list为空则右侧的SET n.available = FALSE不会执行,不为空则执行。而CASE是可以返回需要的list的。

聪明的你是不是已经知道如何hacking了?

下面,给大家抛个砖吧。

LOAD CSV WITH HEADERS FROM "file:///data.csv" AS row
CREATE  (c:Car)
FOREACH (redcohen in CASE
  WHEN row.engine ='1' THEN [1]
  ELSE [] END | SET c.type='EV')
FOREACH (redcohen in CASE
  WHEN row.engine ='2' THEN [1]
  ELSE [] END | SET c.type='PV')

重点的hacking点在哪里呢?
=> 对了,是对FOREACH iteration的准确把握,如果CASE返回的list为空[],则不执行右侧部分SET ...,如果返回为listsize为1,执行右侧部分一次。

是不是还可以处理更加复杂的逻辑?或者更加elegant? 读者自己去创造吧。

相关文章

  • Cypher如何写条件判断结构,hacking一把

    问题描述 在用Cypher完成一个需求时,遇到个尴尬:需要 CREATE 一个noden,然后根据情况给n.typ...

  • python|第四章-程序的控制结构

    4.1 程序的分支结构 单分支结构 二分支结构 多分支结构 条件判断及组合 条件判断 条件组合 实例: 程序的异常...

  • PHP笔记3循环与函数

    if条件判断语句 结构一:只判断true,不管false #######结构二:既判断true,也判断false(...

  • Python练习——判断和循环

    Python 基础总结 (判断和循环) 条件判断 循环结构

  • JAVA与js知识对比(三)

    js 循环 while do……while for 结构样式: for (初始化;判断条件;改变判断条件){ 执行...

  • python之条件判断

    一、if的结构 if结构 if-else结构 if-elif-else结构 二、if的条件 一般条件的逻辑判断结果...

  • if选择结构

    if选择结构 if选择结构的语法是:if(判断条件){满足条件之后,执行的代码块} if-else选择结构,if(...

  • php开发之if&switch语句

    if条件判断语句 结构一:只判断true,不管false if(条件判断:结果是一个布尔值){ //如果条件为真,...

  • 多分支if语句

    语法结构: if[条件判断1] then 当条件判断式1成立时,执行程序1 elif[条...

  • 37-49课程摘要

    程序流程控制 顺序结构; 判断结构if: 多条件对应相同内容时:应该将多条件合并 选择结构Switch Switc...

网友评论

    本文标题:Cypher如何写条件判断结构,hacking一把

    本文链接:https://www.haomeiwen.com/subject/mafqmqtx.html