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