【问题标题】:Group paths by starting node to print - Gremlin按要打印的起始节点对路径进行分组 - Gremlin
【发布时间】:2021-12-08 11:35:08
【问题描述】:

我对 Gremlin 语言还很陌生,仍在学习它的基础知识。我想对源节点的输出进行分组。

以 ToyGraph 为例,使用创建的 graph = TinkerFactory.createModern()。假设对于每个软件,我想计算其创建者的平均年龄,我必须做类似的事情 g.V('software').in('created').mean(),但是这会给我所有软件的所有创建者的平均值,我将如何获得表单的输出: {softA:31.0,softB:40.6,...}。 我已经尝试过group 子句和aggregrate,但不确定如何去做。

【问题讨论】:

    标签: graph gremlin graph-databases tinkerpop3


    【解决方案1】:

    这是一个很好的例子,说明您何时希望使用project() 步骤。 project() 步骤将从图中的当前位置开始创建具有指定标签的值映射。在这种情况下,我们找到所有software 顶点,然后找到project() 的名称和每个software 顶点的年龄。我在下面放了一个示例,其中还包括它发现的所有 age 值,以表明它正在正确计算 mean()

    g.V().hasLabel('software').project('software', 'ages', 'mean_age').
    by().
    by(__.in('created').values('age').fold()).
    by(__.in('created').values('age').mean())
    
    ==>[software:v[3],ages:[29,32,35],mean_age:32.0]
    ==>[software:v[5],ages:[32],mean_age:32.0]
    

    【讨论】:

      【解决方案2】:

      您确实可以为此使用group。查询的第一部分找到任何软件,然后该小组计算创建者的平均年龄。

      gremlin>    g.V().hasLabel('software').
      ......1>          group().
      ......2>            by('name').
      ......3>            by(__.in('created').values('age').mean()) 
      
      ==>[ripple:32.0,lop:32.0]                                                
      

      为了验证我们得到了正确的答案:

      gremlin>    g.V().hasLabel('software').
      ......1>          group().
      ......2>            by('name').
      ......3>            by(__.in('created').values('age').fold())    
         
      ==>[ripple:[32],lop:[29,32,35]]    
      

      【讨论】:

        猜你喜欢
        • 2023-01-24
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-14
        • 2014-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多