【问题标题】:Neo4j how to do a highscore systemNeo4j如何做一个高分系统
【发布时间】:2015-05-20 06:59:13
【问题描述】:

我在一家制作社交游戏的公司工作,我们的用户可以在该游戏中结交朋友,并且可以根据受欢迎程度制作高分内容。

我试图找出我们是否可以将一些数据移动到像 neo4j 这样的图形数据库中,而我不知道的一件事是如何在图形数据库中实现高分系统。我基本上想进行这样的查询: 获取朋友创建的电影/艺术书/照片内容列表,按最喜欢的内容排序。

获取所有用户在过去 7 天内创建的电影/艺术书/照片内容列表,按最喜欢的内容排序。

我们应该做什么样的数据建模和查询来实现这个?

我计划做的数据模型是将用户作为节点,将用户创建的内容链接到用户作为连接内容节点的列表,其中最新的内容节点链接到用户,但是我如何获得高分这样的模型。

谢谢。

【问题讨论】:

    标签: neo4j graph-databases


    【解决方案1】:

    这是一种可能的模型:

    (f:User {name: "Fred"})-[:CREATED]->(c:Content {created: 2345, type: "Music"})
    
    (m:User {name: "Mary"})-[:LIKES {score:5}]->(c:Content)
    
    (f)-[:KNOWS]->(m);
    

    获取自特定时间戳以来所有用户创建的内容,按赞数降序排列,您可以使用以下查询。 OPTIONAL MATCH 用于避免过滤掉没有赞的Content

    MATCH (c:Content)
    WHERE c.created > 1234
    OPTIONAL MATCH ()-[l:LIKES]->(c)
    RETURN c, COUNT(l) AS num_likes
    ORDER BY num_likes DESC;
    

    Here is a console 说明了这一点。

    【讨论】:

    • 您可以简单地使用count(l) 而不是COLLECTLENGTH
    猜你喜欢
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    相关资源
    最近更新 更多