【问题标题】:Converting node names with alphanumeric names to numeric in neo4j在neo4j中将具有字母数字名称的节点名称转换为数字
【发布时间】:2019-07-11 12:10:35
【问题描述】:

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

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

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

我尝试了 toInteger 但不起作用

RETURN toInteger('42AB')

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

【问题讨论】:

  • name 中的 id/acc number 模式是什么?它总是最后 3 位数字还是其他?
  • 其中唯一的模式是帐号后跟 'ACCNT:"。类似于 "XYZ.........ACCNT: "

标签: neo4j cypher graph-databases


【解决方案1】:

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

例如:

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

返回:

123

[更新]

要合并其name 属性以相同数字结尾的Foo 节点,您还可以使用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

【讨论】:

  • 这对数据中的所有节点都有效吗?例如我有这样的所有节点,我们可能必须使用 neo4j 中的 foreach 子句对其进行循环?
  • 查看我的更新答案,了解如何合并节点的示例。我假设感兴趣的节点具有Foo 标签。
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 2012-08-07
  • 2018-03-06
  • 2011-03-18
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
相关资源
最近更新 更多