如何找到没有传入边的所有顶点?

时间:2014-09-30 13:40:53

标签: gremlin titan

下面我尝试使用顶点上的滤镜找到没有传入边的所有顶点。 fullyQualifiedName是一个唯一索引。我注意到一些看起来有边缘的顶点所以我在下面添加了一个步骤,如果它们存在则只打印出来。我原以为没有输出,因为我以为我已经过滤了上面的这些顶点;但是,我仍然看到显示的传入边缘。

def g = BerkeleyGraphFactory.create()

def vertices = g.V.filter {
    it.inE('depends').count() == 0
}

Set<String> u = []

u.addAll(vertices.collect {v->
    v.fullyQualifiedName
})

u.each {
    def focusIter = g.V('fullyQualifiedName', it)
    def vertex = focusIter.next()   

    // this shouldn't print out anything since these vertices were filtered above
    vertex.inE('depends').each { e->
        def classRefV = e.outV.next()
        println it + " is used by " + classRefV.name + " " + e.toString()
    }
}

1 个答案:

答案 0 :(得分:1)

我似乎无法重现你的问题。这里对代码的粗略简化似乎表明事情按预期工作:

gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> ids = g.V.filter{!it.inE('knows').hasNext()}.id.toList() 
==>1
==>3
==>5
==>6
gremlin> ids.collect{g.v(it).inE('knows').toList()}              
==>[]
==>[]
==>[]
==>[]

也许您可以尝试转换代码以匹配我采取的方法,看看是否有帮助?我不确定还有什么可以说你没有提供一些样本数据来处理你可以重新创建问题的特定情况。