【发布时间】:2017-11-27 16:43:27
【问题描述】:
这是受到这两个 SO 线程的启发:
Boolean value return from Neo4j cypher query without CASE
How to set property name and value on csv load?
我有一个包含 3 列的 CSV:
名字,prop_name,prop_value
约翰,体重,100
保罗,身高,200
约翰,头发颜色,金发
保罗,体重,120
所以,有很多人,他们的属性随机分布在不同的行中。我的目标是筛选行并将所有找到的属性分配给它们的持有者。为简单起见,我们只关注“权重”属性。
我确实知道如何使这项工作长期有效:
LOAD CSV WITH HEADERS FROM
"file:///test.csv" AS line
WITH line
MERGE (m:Person {name:line.first_name})
WITH line, CASE line.prop_name WHEN "weight" THEN [1] ELSE [] END as loopW
UNWIND loopW as w
MATCH (p:Person {name: line.first_name})
SET p.weight = line.prop_value
然后,我尝试用更短的版本替换 CASE 行
WITH line, collect(line.prop_name = "weight") as loopW
...这导致了奇怪的行为,创建的节点确实分配了它们的“权重”键,但有时值错误。所以,我可以看到类似 (:Person {weight:blue})
什么是摆脱 CASE 的正确方法?
【问题讨论】: