2012-10-19 90 views
1

我正在用Neo4j構建一些測試應用程序。我想模擬小型社交網絡,並試圖找到:Neo4j - 數據建模

  1. 的用戶X
  2. 友用戶的X的朋友,誰喜歡啤酒

我堅持了建模「所有的朋友知道「關係。讓我們帶3個用戶A,B和C.僅僅定義一個關係就足夠了,他們前例如。

A知道乙
B知道Ç

或我必須作出 '雙向' 關係,並明確規定

A知道B上B知道一個
B知道C所以C知道B

它會增加t他的關係數量,但也許是需要的。

同樣的問題與喜愛的飲料有關。

一個喜歡啤酒

我也應該界定?

啤酒是由A

+0

增加了一些暗號例子情況幫助。 –

回答

4

如果你希望能夠會心B和B來區分知道一個喜歡,那麼你需要有兩個關係。否則,在查詢時,您可以通過省略方向輕鬆獲取。

同樣,如果喜歡啤酒,你只需要定義一個方向。

舉一個真實的例子:facebook/linkedin模型中,連接是相互只需要一個方向/關係,但是一個人可以關注另一個人(但另一個人不必關注他們)的Twitter模型,你需要兩個關係 - 每個方向一個。

更新一些查詢的例子:

CREATE 
(joe {name:"Joe"}), 
(jim {name:"Jim"}), 
(bob {name:"Bob"}), 
(beer {name:"Beer"}), 
joe-[:friends_with]-jim, 
joe-[:friends_with]-bob, 
bob-[:likes]->beer; 

對於朋友:

START person=node:node_auto_index(name="Joe")  
MATCH (person)-[:friends_with]-(friend) 
RETURN person, friend; 

而且誰喜歡啤酒的朋友們:

START person=node:node_auto_index(name="Joe"), beer=node:node_auto_index(name="Beer")  
MATCH (person)-[:friends_with]-(friend)-[:likes]->(beer)  
RETURN person, friend, beer; 
+0

非常感謝回答和例子 – mrok