替代关系弃用警告

时间:2017-08-21 06:45:13

标签: neo4j cypher

Cypher查询:

MATCH (x) WHERE x.uuid = "41f64ab1-6009-4e95-b22b-c833525f6edb" MATCH p = 
(o)-[:CONTAINS|:HAVING*]->(x) WHERE labels(o) IN ['Box', 'Package'] RETURN p

在Neo4j浏览器中运行它会产生警告:

**WARNING: This feature is deprecated and will be removed in future versions.**

The semantics of using colon in the separation of alternative relationship 
types in conjunction with the use of variable binding, inlined property 
predicates, or variable length will change in a future version.

如何重新编写此查询以消除此警告?

提前致谢。

2 个答案:

答案 0 :(得分:2)

此弃用并不是关于无法使用关系类型替代方案的,而是关于其语法的-请参见cypher deprecations in version 3.2。现在只有第一种类型具有冒号,即不是:R1|:R2而是:R1|R2。 Neo4j浏览器中的弃用警告表明,以前的语法将来会具有新的语义。

在模式中指定关系类型实际上比事后过滤路径更有效,这是Tom Geudens执行变通办法的方式。

答案 1 :(得分:0)

这可能会这样做:

MATCH (x) WHERE x.uuid = "41f64ab1-6009-4e95-b22b-c833525f6edb"
MATCH p = (o)-[*]->(x) 
WHERE labels(o) IN ['Box', 'Package']
AND ALL (rs IN relationships(p) WHERE type(rs) IN ['CONTAINS','HAVING'])
RETURN p

希望这有帮助。

此致 汤姆