Итак, у меня есть список списков как свойство. Вот так:
SELECT * FROM cypher('list_test', $$
CREATE(a: person {nickname: [['thomas', 'tomtom'], ['tom', 'tommy']]})
RETURN a
$$) as (timothy agtype);
Я пробовал следующие запросы:
SELECT * FROM cypher('list_test', $$
MATCH(name)
UNWIND(name.nickname) as n
WHERE 'thomas' in UNWIND(n)
RETURN nnn
$$) as result;
Но я получаю синтаксическую ошибку с этим.
ERROR: syntax error at or near "WHERE"
LINE 2: MATCH(name) UNWIND(name.nickname) as n WHERE 'thomas' in UNW...
Используя WITH, вы можете манипулировать выводом до того, как он будет передан в следующие части запроса. Манипуляции могут иметь вид и/или количество записей в результирующем наборе.
Попробуйте этот запрос:
SELECT * FROM cypher('list_test', $$
MATCH (name:person)
UNWIND name.nickname as n
WITH n WHERE 'thomas' IN n
RETURN n
$$) as (result agtype);
Согласно документации , вы должны использовать agtype
в качестве типа, возвращаемого AGE. Кроме того, чтобы вернуть список nickname
в виде отдельных строк, вы должны дважды использовать UNWIND
в качестве команды без ()
. Наконец, вы должны использовать предложение WITH
с предложением WHERE
.
Используйте этот запрос:
SELECT * FROM cypher('list_test', $$
MATCH(name)
UNWIND name.nickname as x
UNWIND x as n
WITH n WHERE 'thomas' in n
RETURN n
$$) as (n agtype);
Вернуться:
n
----------
"thomas"
"tomtom"
"tom"
"tommy"
(4 rows)