您好我正在使用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答案 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