Как узнать количество промежуточных вершин? - PullRequest
0 голосов
/ 16 октября 2019

Допустим, существует древовидная структура.

Верхний уровень: склад

Следующий уровень: пространство для хранения

Последний уровень: сохраненный элемент

Я хочу получить количество мест хранения и предметов хранения для каждого склада.

Я уже пытался получить количество сохраненных предметов: это легко сделать с помощью 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))

Однако я тоже хочу подсчитать «и» и не могу придумать какой-либо быстрый способ добиться этого. Я думал о подсчете обходов примерно как:

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

, но он работает очень медленно на большом количестве вершин (их около 26M).

Есть ли другой способ получить эторассчитывать?

1 Ответ

0 голосов
/ 16 октября 2019

Вы можете использовать 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()

Результатом будет карта массивов, первое значение которой равно количеству пробелов, а второе - количеству элементов.

...