[英]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.