2015-11-03 864 views
0

我有一个Neo4J数据库启动并运行当前2个标签:公司和个人。Neo4j通过相同的属性关联节点

每个公司节点都有一个名为old_id的属性。
每个人节点都有一个名为company的属性。

现在我想建立每个公司和每个人之间的关系,其中old_id和公司共享相同的值。

已经尝试过建议,由:Find Nodes with the same properties in Neo4JFind 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小时。现在,我不得不放弃命令而不知道它是否最终会奏效。因此,我想问问它的理论是否正确,我只是不耐烦(数据集相当大tbh)。或者如果这样做更有效的方式。

+2

1.什么是您当前的模式2.请输出一些公司和人员节点的值,以确保字符串和整数之间不存在不匹配 –

+0

您的第一个查询应该可以正常工作,尤其是,如果你有':Company(old_id)'的索引 –

回答

1

This simple console表明原始查询将按预期,假设:

  1. 您所陈述的数据模型是正确的
  2. 你的数据实际上有PersonCompany分别匹配companyold_id值节点。

    请注意,为了匹配,值必须是相同的类型(例如,两者都是字符串,或者两者都是整数等)。

因此,检查#1和#2是否为真。

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(*); 

从零跳过值只是增加你的总人数在10万步。

相关问题