不知道如何减去也不知道如何比较 Java 中的错误 Cypher 查询
Don't know how to subtract and Don't know how to compare error Cypher query in Java
我正在尝试编写一个具有过滤器的查询,其中包括一些值大于 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`
关于造成这种情况的原因有什么想法吗?或者如何解决它?
AS @DaveBennet 建议,您可能将 volume
和 content
属性设置为字符串值。如果你是,那么这应该 "fix" 你的问题(另外,请注意 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.
我正在尝试编写一个具有过滤器的查询,其中包括一些值大于 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`
关于造成这种情况的原因有什么想法吗?或者如何解决它?
AS @DaveBennet 建议,您可能将 volume
和 content
属性设置为字符串值。如果你是,那么这应该 "fix" 你的问题(另外,请注意 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.