1

我进行以下查询

neo4j-sh (?)$ start n=node(*) where n.name  =~ 'u(.*)' return n; 
==> +-----------------------+
==> | n                     |
==> +-----------------------+
==> | Node[311]{name:"u1"}  |
==> | Node[312]{name:"u2"}  |
==> | Node[313]{name:"u3"}  |
==> | Node[314]{name:"u4"}  | 

我想添加一个“userId”属性并将其设置为名称键中的数字。我的意思是我想要

==> +-----------------------+
==> | n                     |
==> +-----------------------+
==> | Node[311]{name:"u1", userId:'1'}  |
==> | Node[312]{name:"u2", userId:'2'}  |
==> | Node[313]{name:"u3"},userId:'3'  |
==> | Node[314]{name:"u4"}, userId:'4' | 

现在我需要从 n.name 中删除数字。我怎样才能做到这一点?如何从正则表达式中的 (.*) 获取值?

4

2 回答 2

1

你不能在 Cypher 中做到这一点(据我所知)——正则表达式只是为了匹配。

如果它前面总是只有一个字母,您可以使用子字符串:

start n=node(*) 
set n.userId = substring(n.name, 1)
于 2013-06-27T19:14:16.560 回答
0

我遇到了同样的问题,所以我开发了一个微型 Neo4j 服务器插件,让您可以通过 REST API 和字符串节点属性运行正则表达式,以进行匹配/拆分/替换。它可以在 Neo4j 控制台中返回结果或将它们保存到属性中。

看看它,也许你觉得它有用:https ://github.com/mszargar/Regx4Neo

安装只需一分钟,但您必须重新启动 Neo4j 才能生效。

于 2014-07-02T16:37:50.937 回答