10.3 Where

  1. 10.3.1 Основы использования
  2. 10.3.2 Регулярные выражения
  3. 10.3.3 Использование образцов в WHERE
  4. 10.3.4 Коллекции
  5. 10.3.5 Отсутствующие свойства и значения

WHERE не является предложением по своей сути – скорее, это часть MATCH, OPTIONAL MATCH, START и WITH.

В случае использования WITH и START, WHERE просто фильтрует результаты.

Для MATCH и OPTIONAL MATCH, напротив, WHERE добавляет ограничения к описываемому образцу. Оно не будет рассматриваться как фильтр после завершения сопоставления.

Замечание

В случае нескольких предложений (OPTIONAL) MATCH предикат в WHERE всегда является частью образца в непосредственно предшествующем MATCH. Как на результаты, так и на производительность, может повлиять размещение WHERE не у того предложения MATCH.


Рис. 10.3 Граф

10.3.1 Основы использования

10.3.1.1 Булевы операции

Вы можете использовать традиционные булевы операторы AND и OR, а также булеву функцию NOT. Смотрите разделе 8.7 “Работа с NULL” подробности о том, как это работает с NULL-значениями.

Запрос

MATCH (n)
WHERE n.name = 'Peter' XOR (n.age < 30 AND n.name = "Tobias") OR NOT (n.name = "Tobias" OR n.name="Peter")
RETURN n;

демонстрирует использование булевых операторов.

Таблица 10.23 Результат

n
Node[0]{name:"Tobias",age:25}
Node[1]{name:"Peter",age:34}
Node[2]{name:"Andres",age:36,belt:"white"}

10.3.1.2 Фильтр на метке узла

Для фильтрации узлов по метке напишите предикат метки после ключевого слова WHERE следующим образом: WHERE n:foo.

Запрос

MATCH (n)
WHERE n:Swedish
RETURN n

вернёт узел "Andres".

Таблица 10.24 Результат

n
Node[2]{name:"Andres",age:36,belt:"white"}

10.3.1.3 Фильтр на свойстве узла

Для фильтрации по свойству напишите своё предложение после ключевого слова WHERE. Фильтрация по свойствам связи работает точно так же.

Запрос

MATCH (n)
WHERE n.age < 30
RETURN n

вернёт узел "Tobias".

Таблица 10.25 Результат

n
Node[0]{name:"Tobias",age:25}

10.3.1.4 Существование свойства

Чтобы включить только узлы/связи, которые имеют некоторое свойство, используйте функцию HAS() и просто запишите идентификатор и свойство, которое, как вы предполагаете, они имеют.

Запрос

MATCH (n)
WHERE HAS (n.belt)
RETURN n

возвращает узел с именем "Andres".

Таблица 10.26 Результат

n
Node[2]{name:"Andres",age:36,belt:"white"}

Предыдущая | Следующая