问题描述
我想使用两次遍历的结果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");