如何使用Neo4j MERGE包含具有空值的属性

如何使用Neo4j MERGE包含具有空值的属性,neo4j,cypher,Neo4j,Cypher,我有一个节点表和一个边缘表,都可以作为CSV文件使用。 我通过以下方式加载了节点表: USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM 'file:///NodesETL.csv' AS line CREATE (:InfoNodes {id: toString(line.id), description: toString(line.description)}) 此查询使用CSV文件的字段值创建InfoNodes,属性为:InfoNodes,这

我有一个节点表和一个边缘表,都可以作为CSV文件使用。 我通过以下方式加载了节点表:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///NodesETL.csv' AS line
CREATE (:InfoNodes {id: toString(line.id), description: toString(line.description)})
此查询使用CSV文件的字段值创建InfoNodes,属性为:InfoNodes,这很好

InfoNodes与其他InfoNodes有关系,例如,这些关系存在于具有相同标签的节点之间。 这些关系存储在作为附加CSV文件提供的边缘表中。 此边缘表的每一行都包含idfrom和idto字段,这些字段根据InfoNodes的id属性定义InfoNodes之间的关系。 Edge表还包含3个表示关系属性的附加字段。firstproperty始终为字符串且从不为NULL,例如,从不为空字符串。secondproperty和thirdproperty都是字符串类型,可以具有类似“”的空值。因此,secondproperty和/或thirdproperty可以包含空值。 我尝试使用此边缘表通过以下方式在(:InfoNodes)之间创建[:RELATIONSHIP{firstproperty:,secondproperty:,thirdproperty:}]关系:

当Edge表中的secondproperty和thirdproperty包含空值时,第二个密码脚本将导致错误。 Neo4j错误消息为:无法使用secondproperty的null属性值合并关系。 当我从第二个脚本中删除secondproperty字段和secondproperty:property时,会出现相同类型的错误,其中提到thirdproperty:无法使用thirdproperty的null属性值合并关系 当我从上一个脚本中删除secondproperty和thirdproperty字段和属性时,InfoNodes之间的[:RELATIONS]关系将被创建,包括存储为[:relationship]关系的firstproperty:property的firstproperty表字段

问题:如何扩展第二个脚本,以便将第二个属性和第三个属性字段从边缘表加载到包含空值的[:RELATION]关系的第二个属性:和第三个属性:中


描述了相同的问题,但在多个字段/属性具有空值的情况下,没有回答我的问题

您需要重新查看《开发人员指南》中的。特别是在导言中,提到了关于创建和匹配的内容。这允许您在合并导致创建的情况下,或者在合并与现有元素匹配的情况下设置属性

通常,您只希望合并唯一定义对象的属性,如ID,并在创建时在中设置其余属性

此更改后的查询可能如下所示:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///EdgesETL.csv' AS line
MATCH (from:InfoNodes{id: toString(line.idfrom)})
MATCH (to:InfoNodes{id: toString(line.idto)})
MERGE (from)-[r:RELATION {firstproperty: toString(line.firstproperty)}]->(to)
ON CREATE SET r.secondproperty = toString(line.secondproperty), r.thirdproperty = toString(line.thirdproperty)

相同节点之间是否存在多个关系,但某些属性的值不同?或者(idfrom、idto)对是否都是唯一的?:InfoNodes可以与其他:InfoNodes有一个或多个关系,但在多个关系的情况下,每个关系都有自己的标签。因此,InfoNode之间的多个关系在Edge表中有它们自己唯一的idfrom/idto,它们自己的关系属性作为字段。谢谢大家。我承认,我是一个关于Cypher的新手,这是秘密。我确实尝试了CREATE和ON MERGE子句,但我理解并成功了。根据你的回答,我确实理解这些条款的作用。
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///EdgesETL.csv' AS line
MATCH (from:InfoNodes{id: toString(line.idfrom)})
MATCH (to:InfoNodes{id: toString(line.idto)})
MERGE (from)-[r:RELATION {firstproperty: toString(line.firstproperty)}]->(to)
ON CREATE SET r.secondproperty = toString(line.secondproperty), r.thirdproperty = toString(line.thirdproperty)