我正在用Neo4j構建一些測試應用程序。我想模擬小型社交網絡,並試圖找到:Neo4j - 數據建模
- 的用戶X
- 友用戶的X的朋友,誰喜歡啤酒
我堅持了建模「所有的朋友知道「關係。讓我們帶3個用戶A,B和C.僅僅定義一個關係就足夠了,他們前例如。
A知道乙
B知道Ç
或我必須作出 '雙向' 關係,並明確規定
A知道B上B知道一個
B知道C所以C知道B
它會增加t他的關係數量,但也許是需要的。
同樣的問題與喜愛的飲料有關。
一個喜歡啤酒
我也應該界定?
啤酒是由A
我正在用Neo4j構建一些測試應用程序。我想模擬小型社交網絡,並試圖找到:Neo4j - 數據建模
- 的用戶X
- 友用戶的X的朋友,誰喜歡啤酒
我堅持了建模「所有的朋友知道「關係。讓我們帶3個用戶A,B和C.僅僅定義一個關係就足夠了,他們前例如。
A知道乙
B知道Ç
或我必須作出 '雙向' 關係,並明確規定
A知道B上B知道一個
B知道C所以C知道B
它會增加t他的關係數量,但也許是需要的。
同樣的問題與喜愛的飲料有關。
一個喜歡啤酒
我也應該界定?
啤酒是由A
如果你希望能夠會心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;
非常感謝回答和例子 – mrok
增加了一些暗號例子情況幫助。 –