簡體   English   中英

在泰坦圖中刪除后代

[英]Deleting descendants in Titan graph

我想沿着給定的邊關系刪除一組頂點及其所有后代。 就我而言,圖有一些頂點類型為session的頂點,還有一些頂點類型為event的頂點。 從事件到會話都有弧線,其標簽為in_session

似乎沒有快速的方法可以一次性完成此操作。 這是我使用的代碼:

// First, select all event descendants of sessions with r < 700
GraphTraversal<Vertex, Vertex> t = g.V()
    .has("type", "session")
    .has("r", P.lt(700))
    .in("in_session");

// And remove those events
while (t.hasNext())
    t.next().remove();

// Then, using the first part of the query again, 
// select the same sessions as before
t = g.V().has("type", "session").has("r", P.lt(700));

// And delete them as well
while (t.hasNext())
    t.next().remove();

對我來說似乎很笨拙。 此外,如果要刪除較低級別的后代,則必須編寫更多重復的步驟(一直向下到底部,然后刪除,然后備份一個級別,然后刪除,然后再次備份一個級別,依此類推。 ..)。 我也注意到TitanGraph中沒有removeVertex方法。

一種方法是使用sideEffect() 假設我要從TinkerPop 玩具 “現代”圖中的“ marko”頂點中刪除所有“ knows”頂點:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().has('name','marko').outE()
==>e[9][1-created->3]
==>e[7][1-knows->2]
==>e[8][1-knows->4]
gremlin> g.V().has('name','marko').sideEffect(out('knows').drop()).drop()
gremlin> g.V().has('name','marko')
gremlin> g.V(2)
gremlin> g.V(4)
gremlin> g.V(3)
==>v[3]

注意,使用drop()而不是遍歷遍歷以在每個元素上調用remove()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM