#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;