深入学习Gremlin(24):附加操作sideEffect

本文详细解析了图数据库查询语言Gremlin中的附加操作sideEffect,它在路径遍历时进行额外处理但不改变原有结果。文章通过实例演示了如何使用sideEffect与其他Step配合,以及如何使用toLocal来绑定变量初始值。此外,还展示了应用sideEffect计算图中节点的度中心性。

第24期 Gremlin Steps:

sideEffect()

本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据,如下图所示:

init-data

上一期:深入学习Gremlin(23):转换操作map/flatMap

附加操作说明

Gremlin在路径遍历的时候,可以在路径中做一些额外的附加操作,这个附加操作不会改变上一步的结果,会原封不动的传递到下一步去。附加操作看起来就像透明的,但实际上可以将附加操作的处理结果存储到外部变量中去。

下面讲解实现上述功能的具体Step:

  • sideEffect(): 在某个位置插入一个附加操作,以执行额外的操作,通常可与storesack等配合使用。另外如下一些Step本质上也是sideEffect

    group(string)groupCount(string)subgraph(string)aggregate(string)inject(string)profile(string)等。

  • withSideEffect():绑定初始值到变量上,等价于sideEffect的效果。

实例讲解

下面通过实例来深入理解每一个操作。

  1. Step sideEffect(): 附加操作

    示例1:

    // 将所有顶点打印出来
    // sideEffect本身不影响结果
    def list=[]
    g.V().hasLabel('person')
     .sideEffect{list.add("vertex:"+it)}
     .toList()
    

    g.V().toList()

    示例2:

    // 将sideEffect处理的结果打印出来
    def list=[]
    g.V().hasLabel('person')
     .sideEffect{list.add("vertex:"+it)}
     .toList()
    list
    

    g.V().sideEffect().toList()

    注意:Gremlin中的最后一行内容表示输出的结果

    示例3:

    // 将sideEffect结果存到变量中
    g.V().hasLabel('person')
     .sideEffect(outE().count().store("o"))
     .sideEffect(inE().count().store("i"))
     .cap("o","i")
    

    g.V().sideEffect().store()

  2. Step withSideEffect(): 绑定变量初始值

    示例1:

    // 初始化一个变量以供后续条件判断中使用
    // 查找javeme的共同作者,且名称在初始集合中
    g.withSideEffect('p',['Linary Li','Zhoney Zhang','Tom'])
     .V('javeme').out('created').in('created')
     .values('name').where(within('p'))
    

    g.withSideEffect().within()

综合运用
  1. 计算度中心性(Degree Centrality)

    // 利用sideEffect计算3种度中心性
    g.V().group('both').by().by(bothE().count())
         .group('out').by().by(outE().count())
         .group('in').by().by(inE().count())
         .cap('both', 'out', 'in')
    

    degree-centrality

上一期:深入学习Gremlin(23):转换操作map/flatMap
下一期:深入学习Gremlin(25):执行统计和分析

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值