2017-02-10 112 views
1

我有兩個類型爲User的節點鏈接到一個或多個Tweet類型的公共節點。圖像中的一個例子:複製另一個節點的關係

enter image description here

我想刪除重複的用戶,並將它們合併成一個單一節點。保留來自兩個用戶的所有關係。

這是我用它來查找需要合併的節點條件:

MATCH (x:User)-[k:POSTS]->(:Tweet)<-[:POSTS]-(y:User) 

用下面的查詢:

MATCH (x:User)-[k:POSTS]->(:Tweet)<-[:POSTS]-(y:User) 
DELETE k 
WITH x, y 
MATCH (x)-[r:POSTS]->(z:Tweet) 
MERGE (y)-[:POSTS]->(z) 
DELETE r 

其分離USER_B但不鳴叫鏈接用戶a。

請注意,我也嘗試過apoc.refactor.mergeNodes,但它會給出錯誤。

我怎樣才能合併這兩個節點保存他們的關聯?

UPDATE:

MATCH (z:User) 
WHERE (z:User)-[:POSTS]->(:Tweet)<-[:POSTS]-(:User) 
WITH COLLECT(z) AS zs 
CALL apoc.refactor.mergeNodes(zs) YIELD node 
RETURN node; 

與此查詢我獲得重複的關係,是有辦法合併嗎?

更新2:

我試圖用前面的查詢我的數據庫的一個較大的樣本,它提供了錯誤。

+1

更多的澄清。 1.您的問題表明您有興趣「保留來自兩個用戶的所有關係」,但您的其餘問題表明您想刪除「重複」關係。你究竟想要做什麼? 2.如果你真的想將「重複」關係合併成一個,你可能想合併所有的屬性,如果有的話。這些關係是否有價值?如果是這樣,並且要合併的關係對於同一個屬性可以具有不同的值,那麼您希望保留在合併關係中的哪些值? – cybersam

回答

1

該查詢首先從(x)到(tweet)刪除關係,然後嘗試找到它。

試試這個:需要

MATCH (x:User) 
WITH x 
MATCH (x)-[:POSTS]->(t:Tweet)<-[r:POSTS]-(y:User) WHERE x <> y AND id(x) > id(y) 
WITH x, y, count(t) as ag 
MATCH (y)-[r:POSTS]->(z:Tweet) 
MERGE (x)-[:POSTS]->(z) 
WITH y, count(z) as ag 
DETACH DELETE y 
+0

這會刪除兩個用戶節點。 –

+0

是的,我忘了一個細節:'id(x)> id(y)'。查看更新。 –

相關問題