我正在尝试使用neo在许多数据集中创建统一的数据字典,因为许多列都是共享的。我有一个字典作为每个数据集的csv,每个都有共同的列。我是图形数据库的新手,但我认为伪代码应如下所示:
排除我为每个数据集节点手动执行的第1步,这是我到目前为止所拥有的:
USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file:.csv" AS csvLine
MERGE (d:data {field: csvLine.Field, dtype: csvLine.Type, format: csvLine.Format})
ON CREATE SET d.field = csvLine.Field
ON MATCH SET d.field = csvLine.Field
CREATE (dataset)-[r:CONTAINS]->(d);
结果看起来几乎正确,只创建了新字段,并且创建的关系数等于上传数据集中的字段数。但是,我之前创建的(数据集)节点未连接到字段。而是创建无标记节点并将其附加到新数据集中的所有字段。如何将数据集节点正确连接到相应的字段?
答案 0 :(得分:0)
问题在于:CREATE (dataset)-[r:CONTAINS]->(d)
dataset
是一个变量,这是第一次在查询中使用,因此这个CREATE将创建一个空白节点,将其绑定到dataset
变量,然后创建与d
的关系。
变量仅在查询期间持续(或者更少,如果它们不在WITH子句的范围内携带),并且永远不会持久保存到数据库。如果您之前使用dataset
变量在另一个查询中创建了某个节点,则在查询结束时该变量超出范围。如果要再次引用同一节点,则需要在此查询中匹配该节点。