在neo4j中将带有字母数字名称的节点名称转换为数字

时间:2019-07-11 12:10:35

标签: neo4j cypher graph-databases

我在neo4j中有节点名称,其名称类似于“ abc124”,“ abcd124”,“ xyz678”,“ zxyz678”等

在上面的节点名称中,abc124和abcd124具有相同的编号(ID /帐户编号)-124,因此我需要合并这些具有相同ID /帐户编号的节点。我正在尝试的逻辑是将字母数字节点名称与数字分开,然后使用apoc过程合并节点

我找不到从节点名称中删除字符部分的任何功能

我尝试过Integer,但不起作用

RETURN toInteger('42AB')

所以我的输入节点名称是“ abc124”,“ abcd124”,“ xyz678”,“ zxyz678” 所以我想要的输出节点名称是124,124,678,678 ....

1 个答案:

答案 0 :(得分:0)

APOC功能apoc.text.regexGroups可能会有所帮助。

例如:

RETURN TOINTEGER(apoc.text.regexGroups('abc123', '\\d+')[0][0])

返回:

123

[更新]

要合并Foo属性以相同数字结尾的name节点,您还可以使用apoc.refactor.mergeNodes来帮助节点合并(您可能还希望指定一些已记录的节点配置选项,具体取决于您的需求。

MATCH (f:Foo)
WITH f, TOINTEGER(apoc.text.regexGroups(f.name, '\\d+')[0][0]) AS acct
WITH acct, COLLECT(f) AS foos
WHERE SIZE(foos) > 1
CALL apoc.refactor.mergeNodes(foos) YIELD node
RETURN acct