Gremlin 如何获得中间顶点的数量?
假设有一个树状结构 顶层:仓库 下一级:存储空间 最后一级:存储项 我想得到每个仓库的存储空间和存储项目的数量 我已经尝试获取存储项的数量:使用groupCount可以非常轻松地完成Gremlin 如何获得中间顶点的数量?,gremlin,Gremlin,假设有一个树状结构 顶层:仓库 下一级:存储空间 最后一级:存储项 我想得到每个仓库的存储空间和存储项目的数量 我已经尝试获取存储项的数量:使用groupCount可以非常轻松地完成 g.V(). hasLabel('Warehouse'). as('w'). out('HAS_SPACE'). hasLabel('Space'). as('s'). out('HAS_ITEM'). hasLabel('Item
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()
结果将是数组的映射,第一个值是空格计数,第二个值是项目计数