繁体   English   中英

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

[英]Neo4j relate nodes by same property

我有一个Neo4J DB并正在运行,并且当前有2个标签:Company和Person。

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

现在,我想在old_id和company拥有相同价值的每个Person与每个Person之间建立关系。

已经尝试了以下建议: 在Neo4J中 查找具有相同属性的节点, 在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)。 或者,如果有更有效的方法可以做到这一点。

这个简单的控制台显示您的原始查询可以正常工作,并假设:

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

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

因此,请检查#1和#2是否正确。

根据要分页的数据集的大小

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万。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM