【问题标题】:Querying all posts from friends with the post creator's user data in Gremlin在 Gremlin 中使用帖子创建者的用户数据查询朋友的所有帖子
【发布时间】:2020-03-03 12:02:05
【问题描述】:

我正在尝试在应用中实现社交媒体功能

  • 一个 User:meUser:friends
  • 每个用户都有帖子
  • 每个帖子都可以有评论

目前我可以获取用户朋友使用的所有帖子

g.V().has("name", "test1").both("is_friend").both("posted_by").values("post_body").toList()

返回

{
  "status_code": 200,
  "data": "['test3 post', 'test4 post', 'test5 post']",
  "time": 0.22941160202026367
}

但我需要的是使用作者的数据查询帖子,例如

{
  posts: {
    post_body: "test3 post",
    author: {
      name: "test3"
    }
  }
}

如何在 gremlin 中执行此操作?

这也是使用graphdbs的最佳方式吗?

我还考虑过使用 neptune 来处理函数的关系部分,并让 mongodb 包含所有需要显示的数据。

例如 从朋友那里获取所有帖子 ID。然后在mongodb中查询post数据

这对 graphdbs 有更好的用途吗?

【问题讨论】:

  • 你看过project这一步了吗?您可以使用它来生成您需要的所有结果的地图。至于将帖子存储在图表之外,我认为这是一件值得考虑的事情。如果帖子可能很长,一种实现方式是将图表视为所有活动的索引,并包含对实际帖子的引用而不是帖子文本。我见过人们都这样做。
  • @KelvinLawrence 将检查project 步骤。我实际上已经尝试仅使用 mongodb 来实现它。查询非常复杂,恐怕当有大量用户时它不会很好地扩展。现在我正在检查 graphdbs,我意识到在查询 edges 时,graphdbs 非常棒,但对于内部节点却不是很好。这就是为什么我正在考虑使用两者的混合体。我的下一个问题是成本。因为这意味着我们将不得不使用 aws neptune 和 aws documentdb。
  • @KelvinLawrence 我们也将在功能上进行实时聊天。而且恐怕 graphdbs 不适合那种用例。
  • 我见过人们构建由 GraphDB 支持的聊天应用程序,但当然所有用例都不同,有不同的要求。
  • 我添加了一个使用嵌套project 步骤作为答案的示例。希望这会有所帮助。

标签: mongodb gremlin amazon-neptune


【解决方案1】:

这是一个使用嵌套project 步骤构建类似于您描述的结构的示例。由于我没有您的数据,因此我使用了航线数据集,但希望这能显示出我为您的查询所考虑的模式。

g.V('3').
  project('airport','route-data').
    by('code').
    by(project('in-count','out-count').
         by(__.in().count()).
         by(out().count()))   

在控制台中运行时,您会得到此输出。

gremlin> g.V('3').
......1>   project('airport','route-data').
......2>     by('code').
......3>     by(project('in-count','out-count').
......4>          by(__.in().count()).
......5>          by(out().count()))   
==>[airport:AUS,route-data:[in-count:82,out-count:80]]  

【讨论】:

    猜你喜欢
    • 2018-08-16
    • 2020-12-28
    • 2013-11-21
    • 2014-01-19
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    相关资源
    最近更新 更多