如何设置属性名称及其值加载高瘦的csv文件? csv文件只包含3列,节点名(id),属性名(p)和属性值(v)。因此,具有to属性的节点将对应于2行。
Name,Age
A,25
B,34
这种语法并不仅仅是为了解释我想做的事情。有没有办法在密码中做这样的事情?这非常有用,而不是必须首先转移数据。
文件包含人员节点的定义:
Name,property_name,property_value
A,weight,64
A,height,180
B,hair color,blond
第二个文件包含特定节点的属性,每行一个属性
CREATE (p) -[:hasProperty]-> (:Data {Name: row.property_name, Value: row.property_value})
我想更新节点A和B,并根据第二个文件设置其他属性。
如下所述,一种可能性是创建(:Data)节点,每个节点包含一个属性,并将它们链接到人员节点
MATCH (p:Person) --> (d:Data)
RETURN {name: p.name, age: p.age, property_names: collect(d.Name), property_values: collect(d.Value)}
但是,这可能效率不高,并且提取人员节点和属性会变得更加复杂。
overflow: auto;
Graal可以是在加载时动态设置属性名称,也可以是在节点上返回数据属性的pivot函数。
答案 0 :(得分:0)
您无法从参数动态分配属性键,但由于该行是地图,因此您可以将所有行设置为节点上的属性 如果你没问题:
LOAD CSV ... AS row
MERGE (n:Label {Name: row.id})
SET n += row
修改强>
根据您的编辑,对于您的第二个文件,如果您没有太多不同的值,如体重,身高等,您可以创建条件集合,例如:
LOAD CSV WITH ... AS row
WITH row, CASE row.property_name WHEN weight THEN [1] ELSE [] END as loopW
UNWIND loopW as w
MATCH (p:Person {name: row.Name})
SET p.weight = row.property_value
WITH row, CASE row.property_name WHEN height THEN [1] ELSE [] END as loopH
UNWIND loopH as h
MATCH (p:Person {name: row.Name})
SET p.height = row.property_value
...