这是我的模特:
(domain)-[:has]-(data_file)-[:contains]-(entities)-[:have]-(columns)-[:have]-(datatypes)
导入数据的代码
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS from "file:///test.csv" as row
MERGE(domain:Domain{name:row.Domain})
MERGE(data_file:SourceFile{name:row.data_File})
MERGE(entity:Entity{name:row.Entity})
MERGE(column:ColumnName{name:row.Column_Name, Data_Type: row.Data_Type})
MERGE (domain)-[:HAS]->(data_file)
MERGE (data_file)-[:HAS]->(entity)
MERGE (entity)-[:HAS]->(column)
我现在遇到的问题是,当两个不同的实体节点具有相同的Column_Name但具有不同的数据类型时,两个实体节点都指向一个节点(由其Column_Name匹配)
e.g
1. data_file-A has Entity-A, Column_Name: user_id (Data_Type: String)
2. data_file-B has Entity-B, Column_Name: user_id (Data_Type: Boolean)
当我运行上面的导入时,我预计上面的(1.)应该有一个边缘到节点user_id,其数据类型是String,而(2.)应该有另一个边缘到另一个节点user_id,其数据类型是布尔值。但这不会发生。两者都指向名称为user_id
我该如何解决这个问题?有没有办法在创建边时引用neo4j创建的动态id,这样我就可以在这些动态ID之间创建边?
像MERGE (entity.id)-[:HAS]->(column.id)