我正在尝试计算图形中的对象数。但是,顶点必须属于一组特定的键,因此我要执行以下操作:
对于顶点,我使用:
g.V().has('document_id', P.within(list_o_keys)).count().next()
对于Edge,我使用:
g.V().has('document_id', P.within(list_o_keys)).bothE().count().next()
由于我在这些顶点之间有关联,是否会导致重复计算边缘?
例如对于关系A-> B,由于bothE()
会将边从A中返回,将边返回到B中,因此将其计为2条边?
答案 0 :(得分:0)
好吧,我不会称其为边缘重复计算。它先计算输入边,然后计算输出边:
gremlin> g.addV('a').as('a').
......1> addV('b').as('b').
......2> addE('link').from('a').to('b').
......3> addE('link').from('b').to('a').iterate()
gremlin> g.V().hasLabel('a').bothE().count()
==>2
请注意,它不是在从A到B的边缘计数。它是在从A到A的边缘计数。如果您想要一个或另一个,则可以使用outE()
或inE()
,具体取决于根据您的需要。
答案 1 :(得分:0)
在这种情况下,它将对它们进行两次计数,如下例所示:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1,4).count()
==>2
gremlin> g.V(1,4).bothE().count()
==>6
gremlin> g.V(1,4).bothE().dedup().count()
==>5
dedup()
是防止这种情况的最简单方法。另外,请注意,您可以将两个遍历组合在一起:
gremlin> g.V(1,4).fold().
project('a','b').
by(count(local)).
by(unfold().bothE().dedup().count())
==>[a:2,b:5]