2015-11-03 118 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萬步。