Cypher
Создание узлов с помощью MERGE
Запрос:
MERGE (a:Person {name: $name, age: $age})Объяснение:
MERGE: Проверяет, существует ли узел с указанными свойствами. Если не существует, создаёт его. Если существует, повторного создания не будет.(a:Person ...): Создаётся или ищется узел с меткойPerson. Метка (label) описывает тип сущности (например, Person для человека).{name: $name, age: $age}: Свойства узла.nameи ageзадаются через параметры (обозначены как$nameи$age), значения которых передаются из кода.
Создание уникальных связей с помощью MERGE
Запрос:
MATCH (a:Person {name: $name1}), (b:Person {name: $name2})
MERGE (a)-[:FRIENDS]->(b)Объяснение:
MATCH (a:Person {name: $name1}): Ищет узел с меткой Person, у которого свойство name равно значению параметра$name1. Этот узел связывается с переменнойa.MATCH (b:Person {name: $name2}): Аналогично, ищет узел Person с именем$name2и связывает его с переменнойb.MERGE (a)-[:FRIENDS]->(b): Проверяет, существует ли связьFRIENDSот узлаaк узлуb. Если такая связь существует, ничего не делает. Если не существует, создаёт её.[:FRIENDS]:Определяет тип связи. В данном случае это “дружба”.->: Направление связи. Стрелка указывает, чтоaдружит сb.
Поиск друзей конкретного человека
Запрос:
MATCH (a:Person {name: $name})-[:FRIENDS]->(friend)
RETURN friend.name AS name, friend.age AS ageОбъяснение:
MATCH (a:Person {name: $name}): Ищет узел Person с именем, равным значению$name. Этот узел связывается с переменнойa.-[:FRIENDS]->(friend): Находит все узлы, связанные с узломaсвязью типаFRIENDS. Эти узлы связываются с переменнойfriend.RETURN friend.name AS name, friend.age AS age: Возвращает свойства найденных узлов:friend.name— имя друга.friend.age— возраст друга.- RETURN Reference
ASиспользуется для задания алиасов, чтобы упростить доступ к возвращённым данным.
Поиск кратчайшего пути между двумя людьми
Запрос:
MATCH p = shortestPath((a:Person {name: $start})-[:FRIENDS*]-(b:Person {name: $end}))
RETURN pОбъяснение:
MATCH p = shortestPath(...): Начинает поиск пути, который будет присвоен переменнойp. ФункцияshortestPathищет наименьшее количество связей между узлами.(a:Person {name: $start}): Ищет узел с меткойPerson, у которого свойствоnameравно значению параметра$start. Этот узел связывается с переменнойa.-[:FRIENDS*]-: Находит любые связи типаFRIENDS(обозначенные*, что означает “любое количество связей”) между узломaи узломb. Направление связи не имеет значения благодаря использованию-.(b:Person {name: $end}): Ищет узел с меткойPerson, у которого свойствоnameравно значению параметра$end. Этот узел связывается с переменнойb.RETURN p: Возвращает найденный путьp, который представляет собой последовательность узлов и связей отaдоb.
Поиск самого длинного пути между двумя людьми
Запрос:
MATCH p = (a:Person {name: $start})-[:FRIENDS*]-(b:Person {name: $end})
RETURN p, length(p) AS pathLength
ORDER BY pathLength DESC
LIMIT 1Объяснение:
MATCH p = (...): Начинает поиск пути, который будет присвоен переменнойp.(a:Person {name: $start}): Ищет узел с меткойPerson, у которого свойствоnameравно значению параметра$start. Этот узел связывается с переменнойa.-[:FRIENDS*]-: Находит любые связи типаFRIENDSмежду узломaи узломb, независимо от их направления.(b:Person {name: $end}): Ищет узел с меткойPerson, у которого свойствоnameравно значению параметра$end. Этот узел связывается с переменнойb.RETURN p, length(p) AS pathLength: Возвращает найденный путьpи длину этого пути, которая определяется количеством связей (length(p)), присваивая результат алиасуpathLength.ORDER BY pathLength DESC: Сортирует результаты по длине пути в порядке убывания, чтобы самые длинные пути шли первыми.LIMIT 1: Ограничивает результат одним самым длинным путем.