Java Gremlin中的嵌套变换(Titan)

Java Gremlin中的嵌套变换(Titan),java,groovy,gremlin,titan,Java,Groovy,Gremlin,Titan,我有一个图形,有两个顶点,有一个键叫做“type” 为什么会出现以下情况: g.V("type", "language").transform { language_1 -> 1+1; } g.V("type", "language").transform { language_1 -> g.V("type", "language").transform { language_2 -> 1+1; } } 返回: ==>2 ==>2 ==&g

我有一个图形,有两个顶点,有一个键叫做“type”

为什么会出现以下情况:

g.V("type", "language").transform { language_1 ->
  1+1;
}
g.V("type", "language").transform { language_1 ->
  g.V("type", "language").transform { language_2 ->
    1+1;
  }
}
返回:

==>2
==>2
==>[GremlinStartPipe, GraphQueryPipe(has,vertex), IdentityPipe, TransformFunctionPipe]
==>[GremlinStartPipe, GraphQueryPipe(has,vertex), IdentityPipe, TransformFunctionPipe]
以及以下各项:

g.V("type", "language").transform { language_1 ->
  1+1;
}
g.V("type", "language").transform { language_1 ->
  g.V("type", "language").transform { language_2 ->
    1+1;
  }
}
返回:

==>2
==>2
==>[GremlinStartPipe, GraphQueryPipe(has,vertex), IdentityPipe, TransformFunctionPipe]
==>[GremlinStartPipe, GraphQueryPipe(has,vertex), IdentityPipe, TransformFunctionPipe]

在第二个示例中,您看到的是管道的字符串表示形式。您的两个示例查询都返回管道,但当Gremlin控制台看到返回的管道时,它会自动从中读取所有数据并显示。如果希望像在第二个查询中一样,在较大的查询中使用从嵌套管道返回的数据,则必须显式读取数据。试试这个:

g.V("type", "language").transform { language_1 ->
  g.V("type", "language").transform { language_2 ->
    1+1;
  }.next()
}

谢谢你的回答@PaulJackson。我试着按照你说的做,但等了几分钟后失败了:
无法处理单个检索调用
。这是一个有趣的查询,它的编写方式。第一个表示“使用类型语言查找顶点,对于每种语言,返回1+1。”第二个表示“对于每种语言,返回一个管道,每个语言有2个集合。”(因此对于三种语言,您会得到一个3x3嵌套的2集合。)确保基查询g.V(“类型”,“语言”)正常工作。然后,在两个大括号中的任意一个或两个括号后尝试使用.next()或.next()。所有的组合都会为我带来一些回报,但我使用的是自己的控制台。Thanls@Paul_Jackson。你给我指出了一个好的方向。我只是在一个非常具体的案例中使用它,但我从不使用Java编程。关于g.V(“类型”、“语言”)工作不好,你是对的。但是,要真正迭代四次(2x2),必须使用
.next()
,而不是
.iterate()
。顺致敬意,