The Neo4j Manual: Cypher Query Language / Язык запросов Cypher: 7.1.2. Структура

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Структура Cypher позаимствована у SQL -- запросы строятся из различных выражений (clauses).

bordacount 25.12.13 в 17:26

0

Выражения собираются в последовательность и принимают на вход результаты вычислений друг друга. Например, сопоставленные идентификаторы из одного MATCH-выражения будут поданы на вход следующему выражению.

bordacount 25.12.13 в 17:38

0

Язык запросов состоит из нескольких выражений. С подробным описанием можно ознакомиться ниже.

bordacount 25.12.13 в 17:38

0

Вот несколько выражений для чтения данных:

bordacount 25.12.13 в 17:39

0

MATCH: Cтруктура для сопоставления.
Наиболее часто используемый способ получить данные из графа.

WHERE: -- не самостоятельное выражение, а часть MATCH.

OPTIONAL MATCH и WITH -- добавляет ограничение к структуре для сопоставления или фильтрует промежуточный результат с помощью WITH.

RETURN: что должен вернуть запрос.

Посмотрим на MATCH и RETURN в действии.

bordacount 25.12.13 в 17:45

0

Рассмотрим такой граф:

bordacount 25.12.13 в 17:45

0

Рис. 7.1. Пример графа.

bordacount 25.12.13 в 17:45

0

В качестве примера приведём запрос, который ищет пользователя по имени John и его друзей, а затем выводит John и всех друзей его друзей.

bordacount 25.12.13 в 17:48

0

MATCH (john {name: 'John'})-[:friend]->()-[:friend]->(fof)
RETURN john, fof

bordacount 25.12.13 в 17:50

0

Вывод:

john fof
2 rows
Node[3]{name:"John"}
Node[1]{name:"Maria"}
Node[3]{name:"John"}
Node[2]{name:"Steve"}

Теперь добавим фильтрацию, чтобы использовать больше возможностей языка:

bordacount 25.12.13 в 17:51

0

Зададим список имён пользователей и найдём все вершины с именами из списка, выберем их друзей и вернём только тех, у которых поле "name" начинается на "S".

bordacount 25.12.13 в 17:53

0

MATCH (user)-[:friend]->(follower)
WHERE user.name IN ['Joe', 'John', 'Sara', 'Maria', 'Steve'] AND follower.name =~ 'S.*'
RETURN user, follower.name

bordacount 25.12.13 в 17:51

0

Вывод:

user follower.name
2 rows
Node[3]{name:"John"}
"Sara"
Node[4]{name:"Joe"}
"Steve"

Ниже -- примеры выражений для внесения изменений в граф:

bordacount 25.12.13 в 17:54

0

CREATE (и DELETE): Создание и удаление вершин и рёбер.
SET (и REMOVE): Изменение значений полей и добавление новых полей вершинам осуществляется с помощью SET, а их удаление -- с помощью REMOVE.
MERGE: Найти-или-создать новые вершины и структуры. Это выражение особенно выразительно в сочетании с ограничением уникальности.

В главе 5 ("Примеры моделирования данных"), как, впрочем, и во всех остальных частях руководства, можно найти ещё несколько примеров запросов на Cypher.

О выполнении запросов на Cypher из Java повествует раздел 32.12 ("Выполнение запросов на Cypher из Java").

bordacount 25.12.13 в 18:03

0
Минутку...