Похоже, что вы хотите эту информацию для быстрого доступа позже для любого узла с этим типом.Если вы планируете удалять или добавлять ребра в вашем графике, вы должны понимать, что ваши данные быстро устареют, и для всего графа запрос на обновление свойства каждого ребра в графике просто не имеет смысла.
К счастью, Neo4j хранит хранилище транзакций с различной статистикой, включая количество отношений для каждого типа отношений.
Проще всего получить их через вызовы процедур, либо в самом Neo4j, либо в процедурах APOC.
Если у вас установлен APOC, вы можете увидеть карту подсчета типов отношений следующим образом:
CALL apoc.meta.stats() YIELD relTypesCount
RETURN relTypesCount
Если вы знаете, какой тип вы хотите подсчитать, вы можете использовать точечную запись на карте relTypesCountчтобы получить значение, о котором идет речь.
Если оно динамическое (либо переданное в качестве параметра, либо полученное после сопоставления с отношением в запросе), вы можете использовать нотацию индекса карты, чтобы получить такой счет, как этот:
CALL apoc.meta.stats() YIELD relTypesCount
MATCH ()-[r]->()
WITH relTypesCount, r
LIMIT 5
RETURN type(r) as type, relTypesCount[type(r)] as count
Если у вас нет APOC, вы можете использовать db.stats.retrieve('GRAPH COUNTS')
YIELD data
, но вам придетсяo некоторая дополнительная фильтрация, чтобы убедиться, что вы получаете значения для ВСЕХ связей данного типа и исключаете значения, которые включают метки начального или конечного узлов:
CALL db.stats.retrieve('GRAPH COUNTS') YIELD data
WITH [entry IN data.relationships WHERE NOT exists(entry.startLabel) AND NOT exists(entry.endLabel)] as relCounts
MATCH ()-[r]->()
WITH relCounts, r
LIMIT 5
RETURN type(r) as type, [rel in relCounts WHERE rel.relationshipType = type(r) | rel.count][0] as count