Neo4j Cypher - 字符串到整数

Jee*_*ham 6 neo4j cypher

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

INT(r.weight)
Integer.parseInt(r.weight)
convert(INT,r.weight)
Run Code Online (Sandbox Code Playgroud)

但没有任何效果。是否有适当的功能可以这样做?

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

注意:它不是Gremlin 类型转换的可能副本

版本:1.9.5

cha*_*er5 6

在 Cypher 3.3.5toInt()中已弃用,而是使用toInteger()

toInteger(r.weight)- 这工作正常


mam*_*ins 5

扩展Chamber5的答案。

想必您有兴趣对权重进行一些算术运算。一个明显的用例是对进入节点的权重求和。例如,在社交网络中,我们可能对 Ada 从其他节点(同事)收到了多少消息感兴趣;一条消息将该边或关系的权重增加一。

因此,我们希望匹配进入具有“Ada”名称属性的 Person 节点的给定类型 (r) 的所有关系。

MATCH ()-[r]->(n:Person {name:"Ada"})
RETURN sum(toInteger(r.weight)) AS total_weights_in;
Run Code Online (Sandbox Code Playgroud)

当然,我们也可以通过调整我们的 ASCii 艺术来寻找双向总权重:

MATCH ()<-[r]->(n:Person {name:"Ada"})
RETURN sum(toInteger(r.weight)) AS total_weights_in;
Run Code Online (Sandbox Code Playgroud)

这项工作在 Neo4j 3.4.9 版中工作。


Ste*_*ter 3

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