Neo4j/Cypher:提取 StringArray 的最后一项(这就是 neo4j 所说的)
Neo4j/Cypher: Extracting the last item of a StringArray (This what neo4j called it)
假设我有一个带有 属性、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]
您可以 list comprehension 对列表中的每个项目执行 extraction/transformation(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
假设我有一个带有 属性、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]
您可以 list comprehension 对列表中的每个项目执行 extraction/transformation(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