Neo4j 2.0.0.M05 - Cypher通过标签更改函数谓词

时间:2013-09-11 16:32:11

标签: neo4j cypher

今天,我尝试将Neo4j更新为2.0.0.M05。在运行我的应用程序测试之后,对我来说失败的是通过(多个)标签过滤节点。

之前,我尝试过这样做(来源:http://docs.neo4j.org/chunked/2.0.0-M05/query-where.html#where-filter-on-node-label):

START node=node(*) WHERE node LABEL [:mylabel] RETURN node

哪个失败,您可以在此处看到错误:http://console-test.neo4j.org/r/irh886

作为一种解决方法,我使用了函数谓词并创建了查询:

START node=node(*) 
WHERE ANY (label in labels(node) WHERE label IN ['mylabel'])
RETURN node

这适用于2.0.0.M032.0.0.M04,但在2.0.0.M05中无效,您可以在此处看到错误:http://console-test.neo4j.org/r/scx0j4

我在更新日志中遗漏了2.0.0.M05的任何重大变化?我一直在关注http://blog.neo4j.org/2013/09/neo4j-200m05-released.html,但无法注意到与此相关的任何变化。

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,这似乎是一个文档问题。看起来他们已删除了长LABEL谓词形式。

看起来这样做的方法是:

WHERE node:myLabel:myLabel2

WHERE node:myLabel OR node:myLabel2

如果你真的需要像你正在做的那样比较一个数组,那么你的解决方法似乎是合理的。虽然使用node(*)似乎不是有效查找标记节点的最佳方法。

如果您使用cypher legacy作为密码查询的前缀,旧的解析器仍可访问,但它似乎也会从M05中删除。