2015-02-11 87 views
2

這裏是我的查詢:Cypher支架的Neo4j建立兩個節點之間的關係,避免雙向關係

MATCH (a:Person)-[:friend]->(p:Person)<-[:friend]-(b:Person) 
    WITH a, b, COUNT(p) as count 
    WHERE count >= 2 
    CREATE (a)-[:friend {new: "yes"}]->(b) 
    RETURN a,b,count 

我試圖發現至少有2個共同的朋友,他們之間建立朋友關係a和b。以下是結果示例:

a    b   count 
    name1   name2   3 
    name2   name1   3 

注意結果會重複出現,這會在它們之間創建雙向關係。名1 - [:朋友] - > NAME2也意味着名1 < - [:朋友] -name2,所以如果我創建了一個雙向的關係,它們之間的關係將被複制如在我的csv文件:

a    b   relationship 
    name1   name2   friend 
    name1   name2   friend 
    name2   name2   friend 
    name2   name2   friend 

有什麼辦法可以避免這種情況?感謝您的時間。

回答

5

是啊,有一個技巧,以做到這一點:

MATCH (a:Person)-[:friend]->(p:Person)<-[:friend]-(b:Person) 
WHERE ID(a) < ID(b) 
WITH a, b, COUNT(p) as count 
WHERE count >= 2 
CREATE (a)-[:friend {new: "yes"}]->(b) 
RETURN a,b,count 

的變化是WHERE ID(a) < ID(b)這可以確保只在兩個方向上的一個選擇

+0

順便說一句,我拿起這招從Nicole White在Neo4j推薦引擎上的優秀截屏:http://watch.neo4j.org/video/109169965 – 2015-02-11 15:51:55

+0

非常感謝。這是我一直在尋找的。 =) – StudyProgramming 2015-02-11 18:40:09

+0

很高興聽到它!如果它適合你,請接受答案 – 2015-02-11 19:24:21

相關問題