Neo4j通过相同的属性关联节点

时间:2015-11-03 16:12:38

标签: neo4j cypher

我有一个Neo4J数据库,并且正在使用当前的2个标签:公司和个人。

每个公司节点都有一个名为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小时。现在我不得不在不知道它最终是否有效的情况下中止命令。因此,我想问一下它的理论上是否正确,我只是不耐烦(数据集非常大)。或者,如果这是一种更有效的方式。

2 个答案:

答案 0 :(得分:1)

This simple console显示您的原始查询按预期工作,假设:

  1. 您声明的数据模型是正确的
  2. 您的数据实际上包含PersonCompany个节点,分别具有匹配的companyold_id值。

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

  3. 因此,请检查#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步为单位的总人数。