首页 > 解决方案 > 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?(特意选择了“复杂”的计算遍历,当然有更简单的方法来解决这个例子)

谢谢你。

标签: gremlintinkerpoptinkerpop3

解决方案


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

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

推荐阅读