尝试在CASE语句中设置属性时,为什么会收到语法错误?

时间:2016-01-09 23:03:36

标签: neo4j cypher nosql

您好我正在使用Node4j,我正在尝试根据类型更改关系的de属性,我的代码是:

Start f=rel(1) MATCH ()-[f]->()
SET f.distancia=256
return CASE f
WHEN rel(f)='FERROCARRIL'
THEN SET f.tiempo=f.distancia/150*60, f.precio=f.distancia*0.23
WHEN rel(f)='AVION'
THEN SET f.tiempo=f.distancia/250*60, f.precio=f.distancia*0.6
WHEN rel(f)='BUS'
THEN SET f.tiempo=f.distancia/110*60, f.precio=f.distancia*0.25
ELSE
SET f.tiempo=f.distancia/100*60, f.precio=f.distancia*0.28
END

我也尝试使用case rel(f)代替 f ,但我获得了相同的结果。

它返回一个无效的语法错误,我该怎么做?

PS:我需要通过关系的身份

获得 f

1 个答案:

答案 0 :(得分:2)

它不起作用,因为您无法在CASE语句中设置值。要使其工作,您必须在FOREACH语句中设置值。因此,在CASE语句中,您可以为不匹配的类型设置空数组,并为匹配的类型设置单个项数组。

MATCH ()-[f]->()
WHERE id(f) = 1
SET f.distancia=256
WITH f 
, CASE type(f)
    WHEN 'FERROCARRIL'
      THEN [[1],[],[],[]]
    WHEN 'AVION'
      THEN [[],[1],[],[]]
    WHEN 'BUS'
      THEN [[],[],[1],[]]
    ELSE
      [[],[],[],[1]]
END as type_rel
FOREACH( x in type_rel[0] | SET f.tiempo=f.distancia/150*60, f.precio=f.distancia*0.23 )
FOREACH( x in type_rel[1] | SET f.tiempo=f.distancia/250*60, f.precio=f.distancia*0.6 )
FOREACH( x in type_rel[2] | SET f.tiempo=f.distancia/110*60, f.precio=f.distancia*0.25 )
FOREACH( x in type_rel[3] | SET f.tiempo=f.distancia/100*60, f.precio=f.distancia*0.28 )
RETURN type_rel, f

另一种清洁方法就是这样......

MATCH ()-[f]->()
WHERE id(f) = 1
SET f.distancia=256
WITH f 
, CASE type(f)
    WHEN 'FERROCARRIL'
      THEN [150, 0.23]
    WHEN 'AVION'
      THEN [250, 0.6]
    WHEN 'BUS'
      THEN [110, 0.25]
    ELSE
       [100, 0.28]
END as factors
SET f.tiempo=f.distancia/ factors[0] * 60, f.precio= f.distancia * factors[1]
RETURN f