我对路径有这个MATCH查询:
MATCH p=(a)-[sp1:CF*]->(b)-[sp2:CF*]->(c)-[sp3:CF*]->(d)
现在我想仅匹配那些在“子路径”中不包含某个节点的路径,例如良好的路径不应该从(a)
到(b)
越过(avoid1)
。我试过了:
MATCH p=(a)-[sp1:CF*]->(b)-[sp2:CF*]->(c)-[sp3:CF*]->(d)
WHERE NOT EXISTS ( (a)-[:CF*]->(avoid1)-[:CF*]->(b) )
没有返回任何路径。我想这是因为只是检查(a)
到(avoid1)
以及(avoid1)
到(b)
之间是否存在关系 - 就是这种情况。然后我尝试了
MATCH p=(a)-[sp1:CF*]->(b)-[sp2:CF*]->(c)-[sp3:CF*]->(d)
WHERE NOT ( (avoid1) IN nodes(sp1) )
这不起作用,因为sp1
是Collection<Relationship>
而不是路径。因此我得到了错误:
类型不匹配:预期路径但是
Collection<Relationship>
如何检查节点是否在关系集合中?
或许,有没有更聪明的方法来实现我的目标?
答案 0 :(得分:2)
如果您不希望repositories {
jcenter()
mavenCentral()
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
}
位于路径中的任何位置,您只需使用此(查询片段):
avoid1
[EDITED]
如果您只想在MATCH p=(a)-[sp1:CF*]->(b)-[sp2:CF*]->(c)-[sp3:CF*]->(d)
WHERE NOT avoid1 IN NODES(p)
和avoid1
之间避免a
,则可以执行以下操作:
b
最后,如果您希望将MATCH p1=(a)-[sp1:CF*]->(b)
WHERE NOT avoid1 IN NODES(p1)
MATCH p2=(b)-[sp2:CF*]->(c)-[sp3:CF*]->(d)
到a
的完整路径作为单一路径,则可以执行以下操作。
d