繁体   English   中英

Neo4j - 数据建模

[英]Neo4j - data modeling

我正在用Neo4j构建一些测试应用程序。 我想模拟小型社交网络并试图找到:

  1. 用户X的所有朋友
  2. 用户的X朋友的朋友,谁喜欢啤酒

我坚持建模“知道”关系。 让3个用户A,B和C.仅仅定义它们之间的一个关系就足够了。

A知道B.
B知道C.

或者我必须建立“双向”关系并明确提供

A知道B所以B知道A.
B知道C所以C知道B.

它会增加关系的数量,但可能需要它。

同样的问题与喜欢的饮料有关。

喜欢啤酒

我还要定义吗?

A喜欢啤酒

如果你想要区分知道b和b知道a,那么你需要有两种关系。 否则,在查询时,您可以通过省略方向轻松获得两者。

同样,在喜欢啤酒的情况下,你真的只需要定义一个方向。

一个真实的例子:连接是互相的facebook / linkedin模型只需要一个方向/关系,但是一个人可以跟随另一个人的推特模型(但另一个人不必跟随他们),你需要两个关系 - 每个方向一个。

更新一些查询示例:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM