【问题标题】:Deleting descendants in Titan graph删除 Titan 图中的后代
【发布时间】:2016-08-25 10:07:08
【问题描述】:

我想沿着给定的边关系删除一组顶点及其所有后代。在我的例子中,该图有一些类型为 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 方法。

【问题讨论】:

    标签: java graph-databases titan


    【解决方案1】:

    一种方法是使用sideEffect()。假设我想从 TinkerPop toy "modern" 图中的 "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()

    【讨论】:

    猜你喜欢
    • 2013-10-28
    • 2019-04-05
    • 2015-07-19
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    相关资源
    最近更新 更多