Tinkerpop / Gremlin:如何加入多个遍历并在一次遍历中使用它们的值?

问题描述

我想使用两次遍历的结果a,b来计算属性的值。我不知道如何将它们从原点元素/顶点开始遍历到combinedTraversal中。

        Graph graph = TinkerFactory.createModern();

        GraphTraversal a = __.values("age").count().as("count")
                .constant(10).as("allCount")
                .math("count / allCount")
//              .as("a");

        GraphTraversal b = __.values("age").count().as("count")
                .constant(10).as("allCount")
                .math("count / allCount")
//              .as("b");

        GraphTraversal combinedTraversal = __ 
                .local(a).as("a")
                .local(b).as("b")
                .math("a * b");

        graph.traversal().V()
                .has("age")
                .property(Cardinality.single,"value",combinedTraversal)
                .iterate();

在示例中,遍历a和b假定从给定顶点开始并计算其值。当我使用local()时,遍历的位置已更改,我不知道如何退回到原点。

另一方面,使用sideEffect()并不引用当前元素,而是计算映射中所有元素的值。

有什么方法可以构建这样的combinedTraversal? (“复杂”计算遍历是有意选择的,当然,有更简单的方法可以解决此示例)

谢谢。

解决方法

我找到了一个解决方案:投影 https://tinkerpop.apache.org/docs/current/reference/#project-step

GraphTraversal combinedTraversal = __.project("a","b").by(a).by(b).math("a * b");