簡體   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