Ваш запрос может выполнить тесты в обратном порядке. То есть сначала выполните более общие тесты.
На шаге 1 (запроса) вы можете найти все Person
узлы с желаемым YOB
, который будет надмножеством * 1006. * из конечного результата. Давайте назовем этот набор узлов p1
.
. На шаге 2 отфильтруйте набор узлов в p1
по требуемому LastName
, и давайте назовем результирующее подмножество p2
.
На шаге 3 отфильтруйте набор узлов в p2
по требуемому FirstName
, и давайте назовем результирующее подмножество p3
.
Наконец, вы можете вернуть p3
, если это не так пусто, или p2
, если оно не пустое, или p1
.
Вот пример (который предполагает, что желаемые значения YOB
, LastName
и FirstName
передаются как параметры ):
MATCH (:Company)-[:CARRY]->(p:Person)
WHERE p.YOB = $YOB
WITH COLLECT(p) AS p1
WITH p1, REDUCE(s = [], x IN p1 |
CASE x.LastName WHEN $LastName THEN s + x ELSE s END) AS p2
WITH p1, p2, REDUCE(s = [], x IN p2 |
CASE x.FirstName WHEN $FirstName THEN s + x ELSE s END) AS p3
RETURN CASE
WHEN SIZE(p3) > 0 THEN p3
WHEN SIZE(p2) > 0 THEN p2
ELSE p1 END AS result
[ОБНОВЛЕНИЕ]
Если вы хотите ограничить максимальный размер списка result
, просто измените последнюю строку запроса на:
ELSE p1 END[..$limit] AS result
где limit
предполагается параметром.