2015-12-01 53 views
1

我對Neo4j和圖形數據庫一般都很陌生,過去幾天一直在玩它。我現在碰到了一些難以理解的東西:我試圖在兩個不相交的節點之間創建一個「臨時」關係,只是爲了一個RETURN,然後不在DB中存儲這個關係。在Neo4j中以圖形形式返回即時關係

我正在使用的數據集是一個基本的Neo4j內置教程之一中提供的Movie和Person節點的圖形。我的查詢是目前如下:

MATCH (p1:Person)-[r1:ACTED_IN]-(m1:Movie)-[r2:ACTED_IN]-(p2:Person) 
WHERE p1.name="Kevin Bacon" 
RETURN {start:p1,rel:"COSTAR",end:p2} 

我想最終希望看到的是與COSTAR關係的一系列周圍人節點的中央「凱文·培根」節點,而不被任何電影節點或ACTED_IN關係顯示。以上查詢確實顯示返回行中的COSTAR關係,但它並不是出現在圖本身上;我附上了我所看到的一些截圖。

我唯一的想法是使用MERGE關鍵字來創建COSTAR關係,但是(據我瞭解),這實際上將關係保存在數據庫中,這正是我試圖避免的。

任何建議將不勝感激。

"Graph result, note that COSTAR is *not* present

"Rows" result, note that COSTAR is present

回答

2

的Neo4j的瀏覽器僅可視化實際存在於數據庫中的節點和關係。因此,如果不實際創建COSTAR關係,在瀏覽器中可視化結果,然後刪除所有COSTAR關係,就無法做到自己想要的功能。

作爲一種變通方法,你可以簡單地顯示所有的凱文·培根的搭檔中的節點,就像這樣:

MATCH (p1:Person)-[:ACTED_IN]-(:Movie)-[:ACTED_IN]-(p2:Person) 
WHERE p1.name="Kevin Bacon" 
RETURN DISTINCT p2; 
+0

我明白了。我認爲現在我只想回歸合作的明星,而不是創建 - 之後 - 刪除一段關係,因爲這看起來很混亂。謝謝! –

2

所以,你要的關係出現在瀏覽器的Neo4j圖形可視化,但不是存儲在圖形本身這些關係?我想不出有什麼辦法可以做到這一點(沒有黑客攻擊),但是在完成視覺工作後會刪除關係?

查詢創建COSTAR關係:

MATCH (p1:Person)-[r1:ACTED_IN]-(m1:Movie)-[r2:ACTED_IN]-(p2:Person) 
WHERE p1.name="Kevin Bacon" 
CREATE UNIQUE (p1)<-[:COSTAR]-(p2); 

執行查詢來填充的Neo4j瀏覽器的圖形...

然後刪除COSTAR關係:

MATCH (:Person)-[r:COSTAR]-(:Person) 
DELETE r;