Gremlin遍历中用sack存储边属性最大值的更简洁实现方案咨询
有更简洁的实现方式,核心是将边属性最大值的计算逻辑和sack赋值逻辑合并,省略多余的遍历步骤,优化后代码如下:
g.withSack(1).V(33131) .sack(Operator.max).by(outE("parent_to").values("order").max()) // 后续遍历流程可正常调用sack()取值,下方为原示例投影逻辑 .project("count","sack") .by(V().count()) .by(sack())
优化说明
- 省去了原写法中
outE("parent_to").values("order").max().unfold()的独立链式调用,通过sack()的by()调制器直接传入求最大值的子遍历,语法更紧凑 - 两种实现的逻辑完全等价:如果目标节点不存在
parent_to类型出边,或对应边没有order属性,都会保留sack的初始值1,无逻辑差异 - 后续遍历流程可直接调用
sack()获取存储的最大值,无需额外调整
内容的提问来源于stack exchange,提问作者Joe Kennedy
相关产品推荐
相关产品推荐

