java - 不知道如何减法和不知道如何比较 Java 中的错误 Cypher 查询

标签 java neo4j cypher

我正在尝试编写一个查询,该查询具有一个过滤器,其中包含一些值大于 0 的属性,并包含两个属性之间的差异大于 0 的某些节点。但是,使用 Neo4j v 2.1.6。

这是通过嵌入式 Neo4j 引擎在 java 程序中运行的查询。

我的查询看起来像这样:

MATCH (fromJar)-[:IN]->(c)<-[:IN]-(toJar) WHERE c.status='ToDo' AND fromJar.content > 0 AND (toJar.volume - toJar.content) >0 RETURN ID(c) AS contextID, c.step, fromJar.name, fromJar.volume, fromJar.content, toJar.name, toJar.volume, toJar.content

但是,我收到以下错误:

Exception in thread "main" org.neo4j.cypher.CypherTypeException: Don't know how to Subtract(Property(NodeIdentifier(),volume(8),Property(NodeIdentifier(),content(9))) `0` with `5`

对于造成这种情况的原因有什么想法吗?或者如何解决它?

最佳答案

按照 @DaveBennet 的建议,您可能将 volumecontent 属性设置为字符串值。如果是,那么这应该“解决”您的问题(另外,请注意 WHERE 子句中的最后一项已简化):

MATCH (fromJar)-[:IN]->(c)<-[:IN]-(toJar)
WHERE c.status='ToDo' AND TOINT(fromJar.content) > 0 AND
  (TOINT(toJar.volume) > TOINT(toJar.content))
RETURN ID(c) AS contextID, c.step, fromJar.name, fromJar.volume,
  fromJar.content, toJar.name, toJar.volume, toJar.content;

但是,上述修复的性能不是很好,因为它不断执行(实际上应该是不必要的)类型转换。如果您更改这些属性以便它们具有数值,那就更好了。如果这样做,那么查询将如下所示:

MATCH (fromJar)-[:IN]->(c)<-[:IN]-(toJar)
WHERE c.status='ToDo' AND fromJar.content > 0 AND (toJar.volume > toJar.content)
RETURN ID(c) AS contextID, c.step, fromJar.name, fromJar.volume,
  fromJar.content, toJar.name, toJar.volume, toJar.content;

而且,为了进一步提高性能,查询中的 c 节点应该被标记,并且应该有一个 index for that label and the status property .

关于java - 不知道如何减法和不知道如何比较 Java 中的错误 Cypher 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28161412/

相关文章:

java - 错误: cannot find symbol - Java compile error

java - 使用Zoom API共享对Zoom Meeting设置的访问权限

Neo4j深层层次结构查询

当使用节点(*)副节点(1,2,3...)时,Java Neo4j Cypher 查询会导致 unsupportedException

neo4j - Cypher Neo4j ORDER BY DESC查询

java - 如何编写使用 * 打印大写字母 F 的嵌套循环

java - 点击计数器 Java GUI

osgi - 嵌入 OSGi 的 Neo4j

nosql - 访问与 neo4j 中的关系相反的节点的查询是什么

regex - 使用正则表达式进行密码查询