【问题标题】:Gremlin, get two vertices that both have an edge to each otherGremlin,得到两个彼此都有边的顶点
【发布时间】:2020-09-25 10:58:38
【问题描述】:

假设你有 2000 个人,他们可以选择喜欢某个人,这会在他们之间创造优势,例如 A 喜欢 B,现在这并不一定意味着 B 喜欢 A。我将如何编写一个 gremlin 查询来计算淘汰所有喜欢对方的人?那么 A 喜欢 B 而 B 喜欢 A 在哪里呢?

我一直在浏览互联网,找到了.both('likes'),但据我了解,这将吸引喜欢某人或拥有喜欢他们的人的每个人,而不是同时获得两者。

我也发现了这个

g.V().hasId('1234567').as('y').
  out('likes').
  where(__.in('likes').as('y'))

这适用于 1 人,但我不知道如何让它适用于多人。

对我来说,这似乎是一个足够简单的图形问题,但我似乎无法在线找到任何解决方案。从我一直在阅读的所有内容中,似乎可以推断出数据的结构应该是,如果 A 喜欢 B,那也意味着 B 喜欢 A。这是可以实现的,当您创建 A 喜欢 B 的边缘时,您可以检查是否B 已经喜欢 A,如果是这种情况,请插入一个特殊的边缘,类似于... A inRelationshipWith B

对此的查询将是g.V().both('inRelationshipWith'),这会使事情变得更容易。

这是数据结构的问题,我可能错误地使用了图形数据库,还是实际上有一种简单的方法来实现我想要的我缺少的东西?

【问题讨论】:

    标签: graph gremlin amazon-neptune


    【解决方案1】:

    你几乎拥有它。请记住,从另一个顶点到起始顶点的关系从该顶点的角度来看也是out 关系。以下查询使用 air-routes 数据集来查找在两个方向都有路线的所有机场(类似于您的相互友谊案例)

    g.V().
       hasLabel('airport').as('a').
       out().as('b').
       where(out().as('a')).
       select('a','b').
         by('code')
    

    这将返回成对的关系。它将包括每个机场(朋友)两次,例如:

    [a:DFW,b:AUS]
    [a:AUS,b:DFW]
    

    如果您只想要每对中的一个,添加dedup 步骤会将结果集减少到每个关系只有一对。

     g.V().
       hasLabel('airport').as('a').
       out().as('b').
       where(out().as('a')).
       select('a','b').
         by('code').
       order(local).
         by(values).
       dedup().
         by(values) 
    

    找到相反的情况(不存在相互关系)只是在查询中添加not 步骤的情况。

    g.V().
      hasLabel('airport').as('a').
       out().as('b').
       where(__.not(out().as('a'))).
       select('a','b').
         by('code')  
    

    【讨论】:

    【解决方案2】:

    另一种可能的解决方案是:

    g.V().as('y').
      out('likes').where(__.out('likes').as('y')).
      path().dedup().
        by(unfold().
          order().by(id).
          dedup().fold())
    

    您可以在此处通过示例图进行尝试: https://gremlify.com/radpwsh80o

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2023-03-26
      • 2014-05-15
      相关资源
      最近更新 更多