如何将单个(可选)参数推送到数组中

时间:2014-11-07 12:50:05

标签: arrays neo4j cypher

我尝试使用以下密码的第一个fruit.Price行中提供的属性填充数组(WITH):

WITH [{Price_1:15,Price_2:20,Price_3:17,strFruit:"apples"},{Price_1:2,Price_2:1,Price_3:1.5,Price_4:3,strFruit:"pears"}] AS props
UNWIND props as p
MATCH (fruit:Fruit) WHERE fruit.strFruit=p.strFruit
FOREACH (price in [p.Price_1,p.Price_2,p.Price_3,p.Price_4] |SET fruit.Price = fruit.Price + price) 
RETURN fruit

其中p.Price_ n的最大数量为4,但并非所有数据都必须提供(如上所述,第一行中缺少p.Price_4)。这些属性将始终连续提供,即Price_4也不会在没有Price_3的情况下提供。

如何以这种方式使用可变数量的元素填充数组?为了它的价值;我实际上使用的是HTTP Rest API,而WITH行实际上是parameters:命令。

感谢

1 个答案:

答案 0 :(得分:2)

我会使用coalesce(),默认为0表示不存在的。此外,reduce()代替foreach()可能更容易。 (更新为使用CASE / WHEN而不是合并。)

更容易传入一个可变长度{prices:[15,20,17], strFruit:"apples"}的数组...或者只是总价格(如果你可以控制它)。

WITH [{Price_1:15,Price_2:20,Price_3:17,strFruit:"apples"},{Price_1:2,Price_2:1,Price_3:1.5,Price_4:3,strFruit:"pears"}] AS props
UNWIND props as p
MATCH (fruit:Fruit) WHERE fruit.strFruit=p.strFruit
SET fruit.Price = reduce(total = [], price in [p.Price_1,p.Price_2,p.Price_3,p.Price_4] | CASE WHEN NOT price is NULL THEN total + price ELSE total END) 
RETURN fruit

http://console.neo4j.org/r/o69bii