0

假设我有一个带有属性的节点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]

4

1 回答 1

1

您可以列出理解来对列表中的每个项目进行提取/转换(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
于 2018-10-23T05:15:23.810 回答