Cypher / Neo4j: конвертировать любой в строку (из-за применения REVERSE) - PullRequest
0 голосов
/ 18 октября 2018

Я хотел бы уменьшить список в строку, чтобы придерживаться определенного выходного формата, который требует наличия канала ('|') между элементами.Я делаю это следующим образом:

WITH ["three", "two", "one"] AS a RETURN reduce(acc=head(a), s in tail(a) | acc + "|" + s)

Моя проблема возникает из-за того, что массив имеет неправильный порядок: вы видите, что он «считает» нисходящий, а я хотел бы иметьпо возрастанию (в моей производственной среде массив, конечно, является промежуточным результатом запроса графа).

Поэтому я подумал, что просто сделаю

WITH ["three", "two", "one"] AS a RETURN reduce(acc=head(a), s in REVERSE(tail(a)) | acc + "|" + s)

К сожалению, reverse, кажется, возвращает коллекцию некоторого универсального типа (any), который не принимается оператором конкатенации строк:

Type mismatch: expected Float, Integer, String or List<String> but was Any (line 1, column 98 (offset: 97))
"WITH ["three", "two", "one"] AS a RETURN reduce(acc=head(a), s in reverse(tail(a)) | acc + "|" + s)"    
                                                                                                  ^

Таким образом, я хотел бы преобразовать 's' встрока через toString.Эта функция, однако, будет принимать только целые, плавающие или логические значения, а не any.

Что я могу сделать?Я бы также принял решение без конвертации.Я просто хочу иметь возможность свести перевернутые коллекции строк в одну строку.

Спасибо!

1 Ответ

0 голосов
/ 18 октября 2018

Вы можете избежать использования функции REVERSE(), просто изменив порядок, в котором вы объединяете (то есть, используя s + "|" + acc вместо acc + "|" + s):

WITH ["three", "two", "one"] AS a
RETURN REDUCE(acc=HEAD(a), s in TAIL(a) | s + "|" + acc )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...