繁体   English   中英

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:遍历策略完成,无法再调制遍历

我只想知道是否有任何方法可以避免这种重复,因为这两种情况的遍历是相同的gt.V().hasLabel("user").has("name", "John")只是终止操作是不同的。

有什么方法可以存储中间的计数(在 java 变量中)并继续遍历以获取用户列表。

count()步骤是“减少障碍步骤”,这就是您看到自己所做行为的原因。 有很多方法可以解决这个问题。 这是一个使用航线数据集的示例。

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]    

您可以通过投影结果并使用带有本地 scope 的 count() 步骤来实现此目的。

g.V().fold().project('cnt', 'edges').by(count(local)).by()

返回这个:

==>[cnt:6,edges:[v[1],v[2],v[3],v[4],v[5],v[6]]]

本地 scope(即 count(local))将对当前 object 内的每个列表执行所需的操作。 在这种情况下,我们要查找所有顶点,并将它们收集到一个列表中。 一旦我们在 project() 中,我们就会计算本地 scope(即列表中的项目数)并将该计数与原始列表一起返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM