我最近将支持Neo4j的应用程序从Neo4j 3.2升级到Neo4j 3.3,发现围绕类型强制的行为发生了有趣的变化,导致我的应用程序抛出了很多错误。
在Neo4j 3.2和更早版本中,如果将String添加到Double,它将把Double强制转换为String并连接值。 因此,以下内容将是有效的Cypher:
RETURN toFloat("1.0") + " Mark"╒══════════╕
│"result" │
╞══════════╡
│"1.0 Mark"│
└──────────┘
此行为在3.3系列中已更改,并且将引发异常:
RETURN toFloat("1.0") + " Mark"Neo.ClientError.Statement.TypeError: Don't know how to add `Double(1.000000e+00)` and `String(" Mark")`
我们可以通过强制查询在3.2模式下运行来解决此问题:
CYPHER 3.2
RETURN toFloat("1.0") + " Mark" AS result
或者我们可以在Cypher语句中将Double转换为String:
RETURN toString(toFloat("1.0")) + " Mark" AS result
翻译自: https://www.javacodegeeks.com/2018/03/neo4j-cypher-neo-clienterror-statement-typeerror-dont-know-how-to-add-double-and-string.html