我修改了this console中的“vanilla”初始查询,并在“Morpheus”和“Cypher”节点之间添加了一种关系类型“LOCKED”。
如何修改现有的(首次运行)查询,该查询是可变长度的路径,因此由于我添加了附加的Locked关系,它不再到达Agent Smith节点?
首次运行查询:
MATCH (n:Crew)-[r:KNOWS|LOVES*2..4]->m
WHERE n.name='Neo'
RETURN n AS Neo,r,m
我已经尝试过这种事情:
MATCH p=(n:Crew)-[r:KNOWS|LOVES*2..4]->m
WHERE n.name='Neo'
AND none(rel IN rels(p) WHERE EXISTS (StartNode(rel)-[:LOCKED]->EndNode(rel)))
RETURN n AS Neo,r,m
..但是它无法识别none()函数中的模式。
我正在使用社区2.2.1
谢谢阅读
最佳答案
我很确定您不能在MATCH
y类型子句中使用这样的函数(尽管它很聪明)。那这个呢?
MATCH path=(neo:Crew)-[r:KNOWS|LOVES|LOCKED*2..4]->m
WHERE neo.name='Neo'
AND NOT('LOCKED' IN rels(path))
RETURN neo,r,m
编辑:
糟糕,看来Dave可能击败了我。无论如何,这是我想出的解决方案;)
MATCH p=(neo:Crew)-[r:KNOWS|LOVES*2..4]->m
WHERE neo.name='Neo'
WITH p, neo, m
UNWIND rels(p) AS rel
MATCH (a)-[rel]->(b)
OPTIONAL MATCH a-[locked_rel:LOCKED]->b
WITH neo, m, collect(locked_rel) AS locked_rels
WHERE none(locked_rel IN locked_rels WHERE ()-[locked_rel]->())
RETURN neo, m