Neo4j / Cypher: извлечение последнего элемента из StringArray (это то, что neo4j назвал его) - PullRequest
0 голосов
/ 23 октября 2018

Допустим, у меня есть узел со свойством Event, которому назначен массив StringArray.Я пытаюсь извлечь «6013» и «6005», которые были назначены из коллекции при создании узла (см. Ниже код создания запроса), и назначить их в качестве другого свойства.

Я пытался использовать SPLIT, но он не работает с тем, что neo4j называет StringArray.

Event: ["EventLog/6013", "EventLog/6005"]

Запрос создания: событие, назначенное из коллекции

... WITH act.timestamp as timestamp, COLLECT(DISTINCT act.message) as messages, COLLECT(DISTINCT obt.filename) as filenames, COLLECT(act) as acts CREATE (a{ Event: filenames, Description:messages, timestamp:timestamp}) FOREACH (act in acts | CREATE (act)-[:LINK]->(a))

Желаемый узел:

Event: ["EventLog/6013", "EventLog/6005"] Assinged: [6013, 6005]

1 Ответ

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

Вы можете понять список , чтобы выполнить извлечение / преобразование каждого элемента в вашем списке (extract() может сделать то же самое, но я предпочитаю синтаксис понимания списка).

Отв этом вопросе, какие правила нужно соблюдать, чтобы получить нужное значение из строки.

Если значения всегда состоят из 4 цифр, и никогда не бывает завершающего пробела, вы можете использовать right(event, 4), чтобы получитьпоследние 4 символа строки.

Если цифры могут быть различного размера, но префикс для каждой строки всегда равен «EventLog /», то вы можете использовать substring(event, 9), чтобы получить подстроку после 9-го символа.

Если префикс мог меняться, и все, что вы знали, это то, что часть, которую вы хотели, была после первого символа "/", тогда вы могли бы использовать split (), получая вторую часть полученного списка следующим образом: split(event, '/')[1].

В любом случае, если вы хотите, чтобы значение представляло собой целое число, а не строку, вам нужно будет использовать toInteger() для результата.

Вот пример использования списка с использованием right() функция:

WITH ["EventLog/6013", "EventLog/6005"] as events
RETURN [event in events | toInteger(right(event, 4))] as extractedValues
...