Gremlin 如何获得中间顶点的数量?

Gremlin 如何获得中间顶点的数量?,gremlin,Gremlin,假设有一个树状结构 顶层:仓库 下一级:存储空间 最后一级:存储项 我想得到每个仓库的存储空间和存储项目的数量 我已经尝试获取存储项的数量:使用groupCount可以非常轻松地完成 g.V(). hasLabel('Warehouse'). as('w'). out('HAS_SPACE'). hasLabel('Space'). as('s'). out('HAS_ITEM'). hasLabel('Item

假设有一个树状结构

顶层:仓库

下一级:存储空间

最后一级:存储项

我想得到每个仓库的存储空间和存储项目的数量

我已经尝试获取存储项的数量:使用groupCount可以非常轻松地完成

g.V().
      hasLabel('Warehouse').
      as('w').
      out('HAS_SPACE').
      hasLabel('Space').
      as('s').
      out('HAS_ITEM').
      hasLabel('Item').
      groupCount().by(select('w')).
      unfold().
      order().by(values, desc).
      limit(100).
      project('WarehouseName', 'ItemsCount').
          by(select(keys).values('Name')).
          by(select(values))
然而,我也想计算“s”,我想不出任何快速的方法来实现它。我考虑过计算遍历次数,比如:

g.V().
      hasLabel('Warehouse').
      project('WarehouseName', 'SpaceCount', 'ItemCount').
          by('Name').
          by(out('HAS_SPACE').count()).
          by(out('HAS_SPACE').out('HAS_ITEMS').count())

但它在大量顶点(大约有26M)上的工作速度非常慢


是否有其他方法获得该计数?

您可以使用
groupCount
作为
sideEffect
来命名它:

g.V().hasLabel('Warehouse').as('w')
  .out('HAS_SPACE').hasLabel('Space').as('s')
  .groupCount('spaceCount').by(select('w'))
  .out('HAS_ITEM').hasLabel('Item')
  .groupCount('itemsCount').by(select('w'))
  .count().select('spaceCount', 'itemsCount')
请注意,这将返回2个贴图,一个用于空间,一个用于项目。 如果需要将其作为单个地图获取,可以将最后一行替换为:

.count().union(select('spaceCount'),select('itemsCount')).unfold()
.group().by(keys).by(select(values).fold()).unfold()
结果将是数组的映射,第一个值是空格计数,第二个值是项目计数