【问题标题】:Tinkerpop/Gremlin: How to join multiple traversals and use their value in a main traversal?Tinkerpop/Gremlin:如何加入多个遍历并在主遍历中使用它们的值?
【发布时间】:2020-11-06 18:09:06
【问题描述】:

我想使用两次遍历的结果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? (故意选择“复杂”的计算遍历,当然有更简单的方法来解决这个例子)

谢谢。

【问题讨论】:

    标签: gremlin tinkerpop tinkerpop3


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-15
      • 2021-11-27
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多