假设有一个树状结构。
顶层:仓库
下一层:存储空间
最后一级:存储的物品
我想获取每个仓库的存储空间和存储项目数。
我已经尝试获取“已存储项目”的数量:使用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)上的工作速度非常慢。
还有其他方法可以计数吗?
答案 0 :(得分:0)
您可以通过将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()
结果将是一个数组映射,其第一个值为空格数,第二个为项目数。