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

Gremlin 如何查找没有传入边的所有顶点?,gremlin,titan,Gremlin,Titan,下面,我尝试使用顶点上的过滤器查找没有传入边的所有顶点。fullyQualifiedName是唯一的索引。我注意到一些顶点似乎有传入的边,所以我在下面添加了一个步骤,只要它们存在,就可以打印出来。我本以为我已经过滤了上面的这些顶点,所以我没想到会有输出;但是,我仍然可以看到显示的传入边 def g = BerkeleyGraphFactory.create() def vertices = g.V.filter { it.inE('depends').count() == 0 } S

下面,我尝试使用顶点上的过滤器查找没有传入边的所有顶点。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()
    }
}
def g=BerkeleyGraphFactory.create()
def顶点=g.V.filter{
it.inE('dependens')。count()==0
}
设置u=[]
u、 addAll(顶点.collect{v->
v、 完全限定名称
})
u、 各{
def focusIter=g.V('fullyQualifiedName',it)
def vertex=focusIter.next()
//这不应该打印出任何内容,因为这些顶点已在上面过滤
vertex.inE('dependens')。每个{e->
def classRefV=e.outV.next()
println it+”由“+classRefV.name+”+e.toString()使用
}
}

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

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()}              
==>[]
==>[]
==>[]
==>[]

也许您可以尝试转换代码以匹配我所采用的方法,看看这是否有帮助?我不知道还有什么好说的,除非您提供一些样本数据,以便针对您的具体案例重新创建问题。

尝试了您的建议,但没有成功。我正在浏览图表,注意到重复的顶点,尽管我在fullyQualifiedName上有一个唯一的键。我现在正在调查我的提交,但仍然不确定查询怎么会不正确。我考虑过这一点,但也不明白为什么这会很重要