TinkerPop 得到计数并继续相同的遍历
TinkerPop get the count and continue the same traversal
我目前正在使用 TinkerPop java API 进行图形遍历。目前我必须创建相同遍历的副本来计算计数。
Long allUsersCount = gt.V().hasLabel("user").has("name", "John").count().next();
List<Vertex> users = gt.V().hasLabel("user").has("name", "John").toList();
当我尝试重用gt.V().hasLabel("user").has("name", "John").count()
返回的遍历获取列表时,导致了错误
java.lang.IllegalStateException: The traversal strategies are complete
and the traversal can no longer be modulated
我只想知道是否有任何方法可以避免这种重复,因为两种情况下的遍历相同gt.V().hasLabel("user").has("name", "John")
只是终止操作不同。
有什么方法可以在中间存储计数(在 java 变量中)并继续遍历以获取用户列表。
count()
步骤是 "reducing barrier step" 这就是您看到您所执行的行为的原因。有很多方法可以解决这个问题。这是一个使用航线数据集的示例。
gremlin> g.V().has('city','London').
fold().
project('cities','count').
by().
by(count(local))
==>[cities:[v[49],v[50],v[88],v[94],v[206],v[649]],count:6]
您可以通过投影结果并在本地范围内使用 count() 步骤来实现此目的。
g.V().fold().project('cnt', 'edges').by(count(local)).by()
returns这个:
==>[cnt:6,edges:[v[1],v[2],v[3],v[4],v[5],v[6]]]
本地范围(即 count(local))将对当前对象内的每个列表执行所需的操作。在这种情况下,我们找到所有顶点,将它们收集到一个列表中。一旦我们进入 project() ,我们就会计算本地范围(即列表中的项目数)并将该计数与原始列表一起返回。
我目前正在使用 TinkerPop java API 进行图形遍历。目前我必须创建相同遍历的副本来计算计数。
Long allUsersCount = gt.V().hasLabel("user").has("name", "John").count().next();
List<Vertex> users = gt.V().hasLabel("user").has("name", "John").toList();
当我尝试重用gt.V().hasLabel("user").has("name", "John").count()
返回的遍历获取列表时,导致了错误
java.lang.IllegalStateException: The traversal strategies are complete and the traversal can no longer be modulated
我只想知道是否有任何方法可以避免这种重复,因为两种情况下的遍历相同gt.V().hasLabel("user").has("name", "John")
只是终止操作不同。
有什么方法可以在中间存储计数(在 java 变量中)并继续遍历以获取用户列表。
count()
步骤是 "reducing barrier step" 这就是您看到您所执行的行为的原因。有很多方法可以解决这个问题。这是一个使用航线数据集的示例。
gremlin> g.V().has('city','London').
fold().
project('cities','count').
by().
by(count(local))
==>[cities:[v[49],v[50],v[88],v[94],v[206],v[649]],count:6]
您可以通过投影结果并在本地范围内使用 count() 步骤来实现此目的。
g.V().fold().project('cnt', 'edges').by(count(local)).by()
returns这个:
==>[cnt:6,edges:[v[1],v[2],v[3],v[4],v[5],v[6]]]
本地范围(即 count(local))将对当前对象内的每个列表执行所需的操作。在这种情况下,我们找到所有顶点,将它们收集到一个列表中。一旦我们进入 project() ,我们就会计算本地范围(即列表中的项目数)并将该计数与原始列表一起返回。