我尝试使用以下密码的第一个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:
命令。
感谢
答案 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