【问题标题】:Neo4j - data modelingNeo4j - 数据建模
【发布时间】:2012-10-10 03:25:24
【问题描述】:

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

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

我坚持建模“知道”关系。让我们以 3 个用户 A、B 和 C 为例。仅定义他们之间的一种关系是否足够,例如。

A 知道 B
B知道C

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

A知道B,所以B知道A
B知道C,所以C知道B

它会增加关系的数量,但也许是需要的。

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

A 喜欢啤酒

我也应该定义吗?

A 喜欢啤酒

【问题讨论】:

  • 添加了一些密码示例以防万一。

标签: neo4j social-networking data-modeling


【解决方案1】:

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

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

举一个真实的例子:相互联系的 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多