Сколько узлов задействовано в совпадении

#neo4j #cypher

#neo4j #шифр

Вопрос:

Как я могу узнать, сколько узлов и ребер задействовано в совпадении? Есть ли другой способ, кроме объяснения / сопоставления профилей?

Ответ №1:

Если вы имеете в виду, сколько узлов сопоставлено в пути, таком как путь переменной длины, то вы можете назначить переменную path для этого:

 MATCH p = (k:Person {name:'Keanu Reeves'})-[*..8]-(t:Person {name:'Tom Hanks'})
WITH p LIMIT 1
RETURN p, length(p) as pathLength, length(p)   1 as numberOfNodesInPath
  

Вы также можете использовать nodes(p) и relationships(p) для получения коллекции узлов и связей, составляющих путь, и вы можете использовать size() для этих коллекций, чтобы получить их размер.

Ответ №2:

Существует COUNT() функция Cypher, которая позволяет вам подсчитывать количество элементов. Как, например, в этом запросе:

 MATCH (n)
RETURN COUNT(n);
  

В этом запросе будут подсчитаны все узлы в вашей базе данных.

Дополнительную информацию вы можете найти в руководстве cypher, в разделе агрегирующие функции. Проверьте это.

Комментарии:

1. Извините, я неправильно это объяснил. Существует другой способ подсчета разрешенных узлов и ребер в запросе на совпадение. Помимо СОПОСТАВЛЕНИЯ ПРОФИЛЯ или ОБЪЯСНЕНИЯ СООТВЕТСТВИЯ?

Ответ №3:

Следующий фрагмент Cypher должен возвращать количество различных узлов и взаимосвязей, найденных любым заданным MATCH предложением. Просто замените <your code here> своим MATCH шаблоном.

 MATCH <your code here>
WITH COLLECT(NODES(p)) AS ns, SUM(SIZE(RELATIONSHIPS(p))) AS relCount
UNWIND ns AS nodeList
UNWIND nodeList AS node
RETURN COUNT(DISTINCT node) AS nodeCount, relCount;