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

上一期:深入学习Gremlin(23):转换操作map/flatMap
附加操作说明
Gremlin在路径遍历的时候,可以在路径中做一些额外的附加操作,这个附加操作不会改变上一步的结果,会原封不动的传递到下一步去。附加操作看起来就像透明的,但实际上可以将附加操作的处理结果存储到外部变量中去。
下面讲解实现上述功能的具体Step:
-
sideEffect(): 在某个位置插入一个附加操作,以执行额外的操作,通常可与store、sack等配合使用。另外如下一些Step本质上也是sideEffect:group(string)、groupCount(string)、subgraph(string)、aggregate(string)、inject(string)、profile(string)等。 -
withSideEffect():绑定初始值到变量上,等价于sideEffect的效果。
实例讲解
下面通过实例来深入理解每一个操作。
-
Step
sideEffect(): 附加操作示例1:
// 将所有顶点打印出来 // sideEffect本身不影响结果 def list=[] g.V().hasLabel('person') .sideEffect{list.add("vertex:"+it)} .toList()
示例2:
// 将sideEffect处理的结果打印出来 def list=[] g.V().hasLabel('person') .sideEffect{list.add("vertex:"+it)} .toList() list
注意:Gremlin中的最后一行内容表示输出的结果
示例3:
// 将sideEffect结果存到变量中 g.V().hasLabel('person') .sideEffect(outE().count().store("o")) .sideEffect(inE().count().store("i")) .cap("o","i")
-
Step
withSideEffect(): 绑定变量初始值示例1:
// 初始化一个变量以供后续条件判断中使用 // 查找javeme的共同作者,且名称在初始集合中 g.withSideEffect('p',['Linary Li','Zhoney Zhang','Tom']) .V('javeme').out('created').in('created') .values('name').where(within('p'))
综合运用
-
计算度中心性(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')
上一期:深入学习Gremlin(23):转换操作map/flatMap
下一期:深入学习Gremlin(25):执行统计和分析
本文详细解析了图数据库查询语言Gremlin中的附加操作sideEffect,它在路径遍历时进行额外处理但不改变原有结果。文章通过实例演示了如何使用sideEffect与其他Step配合,以及如何使用toLocal来绑定变量初始值。此外,还展示了应用sideEffect计算图中节点的度中心性。
:附加操作sideEffect&spm=1001.2101.3001.5002&articleId=89184241&d=1&t=3&u=8fe3a359795244f6be1a73471a1a88a5)
248

被折叠的 条评论
为什么被折叠?



