Neo4j Cypher - 将字符串转换为整数

9

在这里,属性r.weight的值是一个字符串。我尝试了以下几种可能将其转换为整数:

INT(r.weight)
Integer.parseInt(r.weight)
convert(INT,r.weight)

但是没有任何方法有效。是否有适当的函数可以做到这一点?

reduce(total = 0, r in relationships(p): total + INT(r.weight))

注意:这不是Gremlin类型转换的重复问题。

版本:1.9.5


http://stackoverflow.com/questions/21985133/neo4j-cypher-toint-function/22038374#22038374 - Sumeet Sharma
3
有两个函数叫做 toInt() 和 toFloat()。但是它们将在2.0.2版本中发布。 - Sumeet Sharma
@SumeetSharma,但我正在使用1.9.5版本,这个版本有什么帮助吗? - Jeevanantham
请查看此函数- https://neo4j.com/docs/cypher-manual/3.5/functions/scalar/#functions-tointeger - Yash
3个回答

13
在Cypher 3.3.5中,toInt()已被弃用,应改用toInteger()。例如,toInteger(r.weight) - 这个可以正常工作。

1
问题中提到正在使用版本1.9.5。 - André Kool

5
为了补充 chamber5 的答案,假设您有兴趣使用权重进行一些算术计算。一个显而易见的用例是对节点进入的权重进行求和。例如,在社交网络中,也许我们想知道其他节点(同事)给Ada发送了多少条信息,其中一条信息会使该边缘或关系的权重增加1。
因此,我们希望匹配所有以名称属性为"Ada"的Person节点为终点,关系类型为r的关系。
MATCH ()-[r]->(n:Person {name:"Ada"})
RETURN sum(toInteger(r.weight)) AS total_weights_in;

当然,我们可以通过调整我们的ASCII艺术来寻找双向总权重:
MATCH ()<-[r]->(n:Person {name:"Ada"})
RETURN sum(toInteger(r.weight)) AS total_weights_in;

这适用于Neo4j 3.4.9 版本。

3

正如上面的评论所述,在1.9.x版本的Cypher中没有简单的方法可以实现这一点。作为解决办法,您可以使用neo4j-shell并使用gshjsheval命令执行一个脚本,该脚本会迭代所有关系并将weight属性的值从字符串转换为数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接