Gremlin()会重复计算边吗?

Gremlin()会重复计算边吗?,gremlin,Gremlin,我正在尝试计算图形中的对象数。但是,顶点必须属于一组特定的关键点,因此我执行以下操作: 对于顶点,我使用: g.V().has('document\u id',P.in(list\u o\u key)).count().next() 对于边,我使用: g.V().has('document\u id',P.in(list\u o\u key)).bothE().count().next() 由于这些顶点之间存在关系,这是否会导致边的重复计数 e、 g.对于关系a->B,它将计为2条边,因为这两条

我正在尝试计算图形中的对象数。但是,顶点必须属于一组特定的关键点,因此我执行以下操作:

对于顶点,我使用:
g.V().has('document\u id',P.in(list\u o\u key)).count().next()

对于边,我使用:
g.V().has('document\u id',P.in(list\u o\u key)).bothE().count().next()

由于这些顶点之间存在关系,这是否会导致边的重复计数
e、 g.对于关系a->B,它将计为2条边,因为
这两条()将返回a中的边和B中的边

嗯,我不认为这是重复计算边。它先计算传入边,然后计算传出边:

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()
,这取决于你需要什么。

好吧,我不会称之为边的重复计数。它先计算传入边,然后计算传出边:

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()

在这种情况下,它将对它们进行两次计数,如以下示例所示:

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]

在这种情况下,将对它们进行两次计数,如下例所示:

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]

“这是从A到A的边数。”这对我来说有点误导,有一分钟我认为你们指的是从A顶点开始到A顶点结束的边。我不明白你的意思,因为没有指定一个顶点的边指向它自己。我把它留在这里,也许它会帮助另一个graph db新手在未来“它是从A到A的边数。”这对我来说有点误导,有一分钟我认为你指的是从A顶点开始到A顶点结束的边。我不明白你的意思,因为没有指定一个顶点的边指向它自己。我把它放在这里,也许它将来会帮助另一个graph db新手