我有一个Neo4J数据库,并且正在使用当前的2个标签:公司和个人。
每个公司节点都有一个名为old_id的属性。
每个人员节点都有一个名为company的属性。
现在我想建立每个公司与old_id和公司共享相同价值的每个人之间的关系。
已经尝试过以下建议:Find Nodes with the same properties in Neo4J和 Find Nodes with the same properties in Neo4J
在我尝试的第一个链接后:
MATCH (p:Person)
MATCH (c:Company) WHERE p.company = c.old_id
CREATE (p)-[:BELONGS_TO]->(c)
导致完全没有变化,并且正如我尝试的第二个链接所示:
START
p=node(*), c=node(*)
WHERE
HAS(p.company) AND HAS(c.old_id) AND p.company = c.old_id
CREATE (p)-[:BELONGS_TO]->(c)
RETURN p, c;
导致运行时间> 36小时。现在我不得不在不知道它最终是否有效的情况下中止命令。因此,我想问一下它的理论上是否正确,我只是不耐烦(数据集非常大)。或者,如果这是一种更有效的方式。
答案 0 :(得分:1)
This simple console显示您的原始查询按预期工作,假设:
您的数据实际上包含Person
和Company
个节点,分别具有匹配的company
和old_id
值。
请注意,为了匹配,值必须是相同的类型(例如,两者都是字符串,或者两者都是整数等)。
因此,请检查#1和#2是否为真。
答案 1 :(得分:0)
根据您要分页的数据集的大小
create constraint on (c:Company) assert c.old_id is unique;
MATCH (p:Person)
WITH p SKIP 100000 LIMIT 100000
MATCH (c:Company) WHERE p.company = c.old_id
CREATE (p)-[:BELONGS_TO]->(c)
RETURN count(*);
只需将跳过值从零增加到以100k步为单位的总人数。