一个人如何设置属性名称和它的值来加载一个高瘦的csv文件?csv文件将仅包含3列,节点名称(id),属性名称(p)和属性值(v)。因此,具有to属性的节点将对应于2条线。
LOAD CSV... row
MERGE (n) WHERE n.Name = row.id
SET n.{row.p} = row.v
这种语法不会退出,仅是为了解释我想做的事情。有没有办法在密码中做这样的事情?这真的很有用,而不是必须首先旋转数据。
文件包含人员节点的定义:
Name,Age
A,25
B,34
第二个文件包含特定节点的属性,每行一个属性
Name,property_name,property_value
A,weight,64
A,height,180
B,hair color,blond
我想更新节点A和B,并根据第二个文件设置其他属性。
如下所述,一种可能性是创建(:Data)节点,每个节点包含一个属性,并将它们链接到个人节点
CREATE (p) -[:hasProperty]-> (:Data {Name: row.property_name, Value: row.property_value})
但是,这可能不是很有效,并且提取人的节点和属性变得更加复杂。
MATCH (p:Person) --> (d:Data)
RETURN {name: p.name, age: p.age, property_names: collect(d.Name), property_values: collect(d.Value)}
Graal可以是在加载时动态设置属性名称,也可以是枢纽函数来返回节点上的数据属性。
您不能通过参数动态分配属性键,但是由于该行是映射,因此可以将所有行设置为节点上的属性(如果可以的话):
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
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句