我想在neo4j中设计一个数据库,我想在其中创建节点和其他节点之间的关系。为了解释清楚,请考虑以下场景:
在给定的csv文件中,一列表示唯一的ID,另一列表示类,其中在某些类列中只有一个类,而在许多列中有许多类。
即
---------------------
| ID | Class |
---------------------
| ID1 | Class-A |
---------------------
| ID2 | Class-A |
| | Class-B |
| | Class-C |
---------------------
根据上面的示例数据,查询必须生成具有HAS关系的(ID1)
节点和(Class-A)
节点。ID2
也一样。(ID2)--[HAS]-->(Class-A)
,(ID2)--[HAS]-->(Class-B)
等等。
我可以写以下查询。
load csv with headers from 'path' as line
match(id:ID{id:line.ID}), (temp:TEMP{id:line.Class})
with temp, split(temp.id, " ") as ids
unwind range(0,size(ids)-1) as i
merge(id)-[n:HAS]->(class:CLASS{id:ids[i]})
delete temp
return n
我能够从Class列创建单个节点,但它创建的是空节点而不是关联ID的关系。
任何线索都会有很大帮助。
我是数据库设计新手。谢谢
1条答案
按热度按时间ddrv8njm1#
您需要仔细阅读MERGE子句文档,因为它很容易被错误地使用并得到意想不到的结果。例如,单个节点和关系应该始终分别为
MERGE
d。此外,由于您在开始时查询
MATCH
esId
节点,因此CSV文件中提到的所有Id
节点必须已经存在,否则某些line
s将不起任何作用。目前尚不清楚这是否是故意的。下面是一个应该按预期工作的查询(并根据需要创建
Id
节点)。请注意,我将节点标签更改为混合大小写,以匹配标准neo4j命名约定。此外,不需要临时节点。